Question Comment vérifier quel shell j'utilise?


Je lis que le terminal n’est rien d’autre que le shell, et Unix fournit différentes versions de shells:

  • Bourne shell (sh)
  • C shell (csh)
  • TC shell (tcsh)
  • Korn shell (ksh)
  • Bourne Again shell (bash)

Des questions:

  • Lorsque j'ouvre une fenêtre de terminal, quel shell est ouvert par défaut?
  • Comment vérifier le nombre de shells installés?
  • Comment changer le shell utilisé depuis mon compte?

236
2018-02-28 03:58


origine


Comment déterminer le shell actuel sur lequel je travaille? sur stackoverflow.com - αғsнιη
@KasiyA Ceci est également lié à askubuntu.com/questions/87853/… - d a i s y


Réponses:


Vous pouvez taper la commande suivante dans votre terminal pour voir quel shell vous utilisez:

echo $0

Le résultat ressemblera à celui ci-dessous si vous utilisez le frapper (Bourne à nouveau Shell) Terminal:

-bash

288
2018-02-28 04:03



est 0 une variable d'environnement? - Mi_Onim
@Mi_Onim $ 0 est le nom du processus en cours d'exécution. Si vous l'utilisez à l'intérieur d'un shell, il renverra le nom du shell. Si vous l'utilisez à l'intérieur d'un script, ce sera le nom du script. - kingmilo
REMARQUE: cela ne fonctionnera pas pour interactif csh. % echo $0 No file for $0. , mais ça marche pour tcsh - Sergiy Kolodyazhnyy
Ne fonctionne pas si on est un lien symbolique. Comme bash comme sh - Anwar
@Anwar fait un bon point, après avoir obtenu le nom du shell depuis echo $0, ls -l `which <name>`  pour voir s'il est lié à un autre shell binaire. - JivanAmara


Pour trouver le shell que vous avez sur l'environnement par défaut, vous pouvez vérifier la valeur du SHELL variable d'environnement:

echo $SHELL

Pour rechercher l'instance de shell en cours, recherchez le processus (shell) ayant le PID de l'instance de shell en cours.

Pour trouver le PID de l'instance actuelle du shell:

echo "$$"

Maintenant, pour trouver le processus ayant le PID:

ps -p <PID>

Mettre ensemble:

ps -p "$$"

75
2018-02-28 04:06



$ SHELL est le shell par défaut du système (ou de l'utilisateur), qui est généralement (mais pas nécessairement) le shell réellement utilisé à un moment donné. - kingmilo
@kingmilo: C'est vrai, réponse modifiée. - heemayl
J'ai trouvé cela très utile lors du passage à un utilisateur via 'su - <nom d'utilisateur>', par ex. pour la mise en place de postgres, jenkins, ... - bully
echo $SHELL m'a donné /bin/csh et ps -p $$ m'a donné 22673 pts/1 00:00:00 bash. Kingmilo a expliqué (ci-dessus) pourquoi ils ne sont pas les mêmes. - 18446744073709551615
@ 18446744073709551615 Je n'ai pas dit non plus qu'ils sont identiques. Veuillez lire attentivement la réponse. noter la défaut et actuel libellés. - heemayl


$SHELL vous donne le shell par défaut. $0 vous donne le shell actuel.

Par exemple: j'ai comme shell par défaut bash, que j'utilise pour mon application de terminal. Mais pour mon application iTerm2, j'utilise la commande lorsque la fenêtre s'ouvre: /bin/ksh.

Donc mon $0 Donne moi /bin/ksh sur iTerm2. $SHELL Donne moi /bin/bash sur iTerm2. $0,$SHELL Donne moi /bin/bash sur le terminal


16
2017-11-18 11:45



C'est une belle désambiguïsation des autres réponses les plus votées. Je vous remercie. - Michael Hoffmann


Pour savoir quel est le shell par défaut pour votre utilisateur, vous pouvez exécuter:

echo "$SHELL"

Par exemple, si vous utilisez Bash, vous devriez obtenir la sortie suivante:

/bin/bash

Si vous n'avez modifié aucune configuration, il devrait s'agir de Bash car Bash est le shell par défaut sur Ubuntu.


5
2018-02-28 04:02



/ bin / sh est le langage de commande du shell et non le shell Bourne, veuillez modifier votre réponse. - kingmilo
@kingmilo Il n'y a pas de /bin/sh référence dans ma réponse - kos
@kol il y avait avant de modifier. Veuillez également noter que $ SHELL est le shell par défaut du système (ou de l'utilisateur), qui est généralement (mais pas nécessairement) le shell actuellement utilisé. - kingmilo
@kingmilo S'il vous plaît noter que la question est "quand j'ouvre le terminal quel shell est ouvert par défaut ???" et que la réponse est "Si vous n'avez modifié aucune configuration, elle devrait être Bash, parce que c'est le shell par défaut sur Ubuntu ", alors la réponse correspond à la question - kos
@kingmilo En lisant à nouveau la réponse, je pense comprendre ce qui vous préoccupe, sans doute je ne me suis pas bien exprimé. J'ai clarifié le sens de "actuellement" dans ma réponse - kos


Les autres réponses ont tendance à utiliser des fonctionnalités spécifiques au shell, mais nous essayons de découvrir quel shell nous utilisons, pour qu'elles répondent à ce problème. Par exemple, aucune des réponses ne fonctionnera sur les poissons.

sh -c 'ps -p $$ -o ppid=' | xargs ps -o cmd= -p

Au lieu de cela, utilisez la syntaxe $$ dans un appel de sh, mais nous recherchons alors le PPID et non le PID. Utilisez le PPID pour trouver la cmd.

sh -c 'ps -p $$ -o ppid=' | xargs -i readlink -f /proc/\{\}/exe

Merci pour l'amélioration @muru


2
2018-04-06 04:00



Vous pouvez utiliser ppid=/cmd=omettre les en-têtes (et donc le tail -1s), et envisager de regarder /proc/.../exe pour voir quel fichier est en cours d'exécution (depuis le cmd la sortie peut être manipulée par tout ce qui court le shell). - muru
Apparemment, cela ne fonctionne pas dans busybox, en raison de la non-conformité à Posix: ref: github.com/broadinstitute/cromwell/pull/… - Evan Benn