$ 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
Ich erwarte, dass sich das $SHELL
ändert, nachdem ich eine andere Shell ausgeführt habe. Warum nicht?
PS Die Shell ändert sich jedoch, nur die Variable $ SHELL bleibt unverändert:
$ dash
$ echo $SHELL
/bin/bash
$ T=test ; [[ $T = *est ]] && echo ok
dash: [[: not found
shell
environment-variables
eilen
quelle
quelle
echo $0
, um die aktuelle Shell zu erhaltenAntworten:
Sie sollten nicht erwarten, dass sich diese Variable ändert. Es wird verwendet, um den Pfad zu Ihrer Standard-Shell zu speichern, dh dem Pfad, der in der Kennwortdatenbank gespeichert ist, nicht zu der Shell, die Sie gerade ausführen.
quelle
SHELL
wird von POSIX angegeben . Zitat:Das Ausführen einer anderen Shell weist nicht unbedingt auf eine Änderung der Benutzereinstellungen hin.
Es ist gut zu lernen, welche Arten von Dingen von POSIX angegeben werden und wo danach gesucht werden muss, da die meisten * .nix-Systeme auf POSIX-Kompatibilität abzielen. Umgebungsvariablen sind eines dieser Dinge.
quelle
Die Variable SHELL speichert die übergeordnete Shell für Ihre Sitzung, die manchmal mit Ihrer Standardanmeldeshell übereinstimmt . Die $ SHELL ist die übergeordnete Shell, aus der die aktuelle Sitzung hervorgegangen ist.
Also, wenn ich bash für meinen Benutzer verwende und dies tue:
chsh -s /bin/zsh user
Wenn ich das tueecho $SHELL
, wird die angezeigte Shell immer noch angezeigtBASH
.siehe diesen Artikel .
quelle