web-dev-qa-db-fra.com

Comment vérifier quel shell j'utilise?

J'ai lu que le terminal n'est rien d'autre que Shell, et Unix fournit différentes saveurs de coques:

  • 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 coques installées?
  • Comment changer le shell utilisé depuis mon compte?
323
goutham mudide

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

echo $0

Le résultat ressemblera à ce qui suit si vous utilisez le terminal bash (Bourne Again Shell):

-bash
395
kingmilo

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

echo $Shell

Pour rechercher l'instance Shell actuelle, recherchez le processus (Shell) ayant le PID de l'instance Shell actuelle.

Pour trouver le PID de l'instance actuelle de Shell:

echo "$$"

Maintenant, pour trouver le processus ayant le PID:

ps -p <PID>

Mettre ensemble:

ps -p "$$"
114
heemayl

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

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

Donc, mon $0 me donne /bin/ksh sur iTerm2. $Shell me donne /bin/bash sur iTerm2. $0, $Shell me donne /bin/bash sur le terminal

24
thenakulchawla

Les autres réponses utilisent généralement des fonctionnalités spécifiques à Shell, mais nous essayons de découvrir quel Shell nous utilisons, elles supposent donc la réponse au problème. Par exemple, aucune des réponses ne fonctionnera sur le poisson.

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

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

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

Merci pour l'amélioration @muru

8
Evan Benn

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 le résultat suivant:

/bin/bash

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

7
kos

Le message original posait trois questions. Les réponses données couvrent la première question, "Quand j'ouvre une fenêtre de terminal, quel Shell est ouvert par défaut?" Ils répondent également à une question qui N'A PAS été posée, à savoir "Comment puis-je savoir quel Shell est en cours d'exécution dans le terminal?" Toutefois, pour autant que je sache, personne n’a répondu à la deuxième ou à la troisième question posée à l’origine, à savoir: "Comment puis-je vérifier le nombre de réservoirs installés?" et "Comment changer le shell utilisé depuis mon compte?"

  • Pour répondre "Comment puis-je vérifier le nombre de coques installées?" la commande suivante listera tous les shells disponibles:

chat/etc/coquilles

Par exemple, sur une installation par défaut d’Ubuntu 18.10, ceci donne:

#/etc/shells: shells de connexion valides

/ bin/sh

/ bin/dash

/ bin/bash

/ bin/rbash

Cependant, par défaut, sh est un lien symbolique vers dash, tandis que rbash se connecte à bash avec l'option -r ("restricted bash"), de sorte qu'il n'y a en réalité que deux shells, et non quatre comme le suggère la liste ci-dessus. La commande suivante vous montrera si l'un des shells listés est en fait un lien symbolique et, le cas échéant, à quel lien: ls -l/bin

4
Michael D