569 votes

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

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

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

Questions :

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

10voto

ieplugin Points 216

Pour savoir quel est le shell par défaut de 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é depuis 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 entraîne un bref dialogue dans lequel l'utilisateur est d'abord invité pour leur mot de passe et ensuite pour le chemin complet du nouveau shell souhaité.

Il convient d'être prudent lors du changement de son shell par défaut car il est possible de commettre 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). En particulier, il est important de tester d'abord le shell temporairement dans la session courante et ensuite 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 à passer par l'éditeur pour le faire.

Une fois que cela est 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 pourrait faire croire à l'OP qu'il s'agit du shell Bourne et non de GNU bash, sauf celle-ci qui donne /bin/bash

Une autre option qui fonctionne dans ce cas est :

$ echo $SHELL
/bin/sh

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

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

0voto

MikeBeaton Points 143

Vous ne voudrez peut-être pas connaître le nom du shell actuel (par exemple, -bash, bash, zsh, etc., à partir de echo $0), ni le chemin d'accès de l'exécutable par défaut du shell (à partir de echo $SHELL), mais plutôt le chemin d'accès de l'exécutable du shell actuel (particulièrement utile si vous avez plus d'une version de Bash installée).

Pour cela, vous pouvez utiliser lsof -p "$$" ou avec quelques lignes de code supplémentaires 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

Le résultat ci-dessus est différent de echo $SHELL, d'une part parce que le résultat ci-dessus concerne le shell actuellement en cours d'exécution plutôt que le shell par défaut de l'utilisateur, et d'autre part parce que le résultat ci-dessus 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.

ÉDIT : Si vous avez besoin de prendre en compte la possibilité de caractères d'espacement dans le chemin d'accès 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