Quel est le shell par défaut pour le terminal?

51

Disons que j'ai ouvert un terminal et entré / exécuté des commandes shell.

Mais je n'ai pas invoqué explicitement Bash ni aucun autre shell.

Quel shell a été utilisé par défaut?

DrStrangeLove
la source

Réponses:

51

Celui spécifié sur votre ligne /etc/passwd(c'est une :ligne séparée et le shell est le dernier).

Par exemple le mien:

chris:x:1000:1000:Chris,,,:/home/chris:/bin/bash

La voici /bin/bash(la valeur par défaut Ubuntu)

Vous pouvez également utiliser chsh:

$ chsh
Password: 
Changing the login shell for chris
Enter the new value, or press ENTER for the default
        Login Shell [/bin/bash]:

Cela me dit que ma coquille est /bin/bashet me laisse changer.

Enfin, echo $SHELLva faire la même chose:

$ echo $SHELL
/bin/bash
Césium
la source
Si c'est bash, pourquoi est-il parfois appelé explicitement comme sudo bash -c "netstat -an | grep LISTEN | grep -v ^ unix" ??
DrStrangeLove
Je pense que c'est une mauvaise commande personnellement - rien de tout cela n'a même besoin de root. Si c'était le cas , il serait préférable d'écrire comme sudo netstat -an | grep LISTEN | grep -v ^unix. Je ne vois aucune raison de mettre cela dans un sous-shell bash.
Cesium
2
@DrStrangeLove: Si plus d'une commande du canal nécessitait des autorisations root, sudo bash -c "..."cela garantirait que le canal entier est exécuté par root.
Keith Thompson
Si vous ne savez pas quelles commandes nécessitent root (et pourquoi), vous ne devriez pas les exécuter. Sinon, pourquoi faire confiance à une commande / programme / script plus que nécessaire. Si vous ne le pouvez pas commandA | sudo commandB | commandC, vous pouvez faire une sudo idpremière action (la idcommande est root
exécutée en
2
Si vous utilisez chshalors vous devez vous déconnecter et vous reconnecter pour voir ce changement.
Neil Traft
17

GNU Bash est le shell utilisé par défaut dans les terminaux sur Ubuntu. Toutefois, lorsque les scripts sont exécutés au démarrage du système, un tiret est utilisé, car il s’agit du tiret / bin / sh.

Ceci est défini dans la variable environnementale $ SHELL. Vous pouvez vérifier en tapant echo $SHELLdans le terminal.

Anonyme
la source
14

en tapant ce qui suit affichera le shell avec lequel le terminal a ouvert:

echo $SHELL

Cependant, pour savoir dans quel shell vous vous trouvez (vous l'avez peut-être changé), tapez

ps -p $$

par exemple, vous verrez que le shell est bash dans l'exemple de sortie

  PID TTY          TIME CMD
 3500 pts/0    00:00:01 bash

Une autre méthode consiste à utiliser

echo $0

cela retournera simplement le nom du shell actuel.

fossfreedom
la source
+1 pour la simplicitéecho $0
djthoms
Très bonne réponse! Merci, pour une raison quelconque, echo $ SHELL n'a pas fonctionné (toujours utilisé celui-là) et vos deux alternatives ont fonctionné. Merci!
wolfdawn
3

Par défaut c'est bash:

env | grep ^SHELL=

Dans la plupart des cas, produira

SHELL=/bin/bash
wojox
la source
Pas nécessairement. Si vous créez un nouvel utilisateur avec useradd, sa valeur par défaut est sh. $ useradd -D|grep SHELL SHELL=/bin/sh.
Sparhawk
+1, car même si la réponse sélectionnée nécessite moins de frappe, il est toujours agréable d'avoir plus d'une façon de faire quelque chose.
2

Pour obtenir le chemin du fichier de l'exécutable du shell actuel, on peut utiliser

readlink -f /proc/$$/exe

Quelques sorties possibles sont:

  • /bin/bash
  • /usr/bin/bash
  • /usr/bin/zsh
  • /home/stan/.linuxbrew/Cellar/zsh/5.2/bin/zsh
Victor Yarema
la source