$ echo $SHELL
/bin/bash
$ /bin/ksh93
$ echo $SHELL
/bin/bash
$ file /bin/ksh93
/bin/ksh93: ELF 64-bit LSB executable, x86-64, version 1 (SYSV),
dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped
$ getent passwd test111
test111:x:1008:1008:,,,:/tmp:/bin/ksh93
$ ssh test@localhost
test@localhost's password:
$ echo $SHELL
/bin/ksh93
$ bash
$ echo $SHELL
/bin/ksh93
Je m'attends $SHELL
à ce que cela change après avoir exécuté un autre shell. Pourquoi pas?
PS Cependant, le shell change, seule la variable $ SHELL reste la même:
$ dash
$ echo $SHELL
/bin/bash
$ T=test ; [[ $T = *est ]] && echo ok
dash: [[: not found
shell
environment-variables
se ruer
la source
la source
echo $0
pour obtenir le shell actuelRéponses:
Vous ne devez pas vous attendre à ce que cette variable change. Il est utilisé pour stocker le chemin d'accès à votre shell par défaut, c'est-à-dire celui stocké dans la base de données de mots de passe, et non le shell que vous utilisez actuellement.
la source
SHELL
est spécifié par POSIX . Citant:L'exécution d'un shell différent n'indique pas nécessairement un changement dans les préférences de l'utilisateur.
Il est bon d'apprendre les types de choses que POSIX spécifie et où les rechercher car la plupart des systèmes * .nix visent la conformité POSIX. Les variables d'environnement sont l'une de ces choses.
la source
La variable SHELL stocke le shell parent de votre session, qui correspond parfois à votre shell de connexion par défaut . $ SHELL est le shell parent qui a généré la session en cours.
donc, si j'utilise bash pour mon utilisateur et que
chsh -s /bin/zsh user
je le fais:, quand je le feraiecho $SHELL
, le shell affiché sera toujoursBASH
.voir cet article .
la source