569 votes

Comment puis-je vérifier quel shell j'utilise ?

J'ai lu que le terminal n'est rien d'autre que le shell, et Unix propose différentes variantes de shell:

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

Questions :

  • Quand j'ouvre une fenêtre de terminal, quel shell est ouvert par défaut ?
  • Comment puis-je vérifier combien de shells sont installés ?
  • Comment puis-je changer le shell utilisé pour mon compte ?

10voto

ieplugin Points 216

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 pas modifié de configuration, il devrait s'agir de Bash car Bash est le shell par défaut sur Ubuntu.

1voto

Greenonline Points 1561

Pour répondre à votre troisième question, "Comment changer le shell utilisé à partir de mon compte?", la réponse est d'utiliser chsh.

Il y a deux modes:

  • interactif, et;
  • non interactif.

De Changing Shells - Changer votre shell de connexion qui est permanent, et en le paraphrasant légèrement:

Vous utiliserez un programme appelé chsh. Il y a une méthode interactive et une méthode non interactive. Tapez ce qui suit dans votre terminal:

MÉTHODE INTERACTIVE

$ chsh

Cela donne lieu à un bref dialogue dans lequel l'utilisateur est d'abord invité à entrer son mot de passe puis le chemin complet du nouveau shell désiré.

Il convient de faire preuve de prudence lors du changement de son shell par défaut car il est possible de faire une erreur que seul l'utilisateur root (c'est-à-dire, l'administrateur système) peut réparer (bien qu'il devrait être facile pour un utilisateur expérimenté de le réparer sur un système domestique). Il est important en particulier de tester d'abord le shell temporairement dans la session en cours puis de s'assurer qu'un nom de shell valide est saisi lors du changement permanent.

MÉTHODE NON INTERACTIVE

Je vais utiliser csh à nouveau comme exemple.

$ chsh -s /bin/csh

Le -s le configure pour vous sans avoir à aller dans l'éditeur pour le faire .

Une fois cela exécuté avec succès, alors echo $SHELL indiquera toujours que vous êtes dans le même shell qu'avant. Cependant, vous devez vous déconnecter et vous reconnecter pour que le changement prenne effet. Maintenant faites echo $SHELL. Vous devriez voir qu'il affiche le nouveau shell.

0voto

Fathi Points 1

Dans l'un des serveurs auxquels je me connecte, le shell de connexion est /bin/sh qui est un lien symbolique vers /bin/bash

La plupart des réponses ici donneront sh, ce qui ferait penser à l'OP qu'il s'agit du shell Bourne et non de GNU bash, à l'exception de celle-ci qui donne /bin/bash

Une autre option qui fonctionne pour ce cas est :

$ echo $SHELL
/bin/sh

$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 mai 31 16:15 /bin/sh -> bash

$ /bin/sh --help
GNU bash, version 4.2.10(1)
Utilisation :  /bin/sh [option GNU longue] [option] ...
        /bin/sh [option GNU longue] [option] fichier-de-script ...

0voto

MikeBeaton Points 143

Vous ne voulez peut-être pas connaître le nom du shell actuel (par exemple -bash, bash, zsh, etc., à partir de echo $0), ni le chemin d'exécution par défaut du shell (à partir de echo $SHELL), mais plutôt le chemin d'exécution du shell actuel (surtout utile par exemple si vous avez plusieurs versions de Bash installées).

Pour cela, vous pouvez utiliser lsof -p "$$" ou avec un peu de codage supplémentaire pour extraire uniquement les informations requises :

lsof -p "$$" | grep -m 1 txt | xargs -n 1 | tail -n 1

Exemple de sortie pour Bash installé via Homebrew :

/usr/local/Cellar/bash/5.1.8/bin/bash

ou pour Zsh :

/bin/zsh

Cela diffère de echo $SHELL, à la fois parce que ce qui précède concerne le shell qui s'exécute actuellement plutôt que le shell par défaut de l'utilisateur, et aussi parce que ce qui précède donne l'exécutable après que tous les liens symboliques ont été étendus. Par exemple, pour la même installation de Bash que ci-dessus, echo $SHELL donne /usr/local/bin/bash.

MODIFICATION : Si vous avez besoin de prévoir la possibilité de caractères d'espace dans le chemin du shell, utilisez lsof -p "$$" | grep -m 1 txt | xargs -n 1 | tail -n +9 | xargs à la place.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X