Warum ändert sich $ SHELL nicht, wenn ich eine neue Shell starte?


14
 $ 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

2
Verwenden Sie echo $0, um die aktuelle Shell zu erhalten
Manula Waidyanatha

Antworten:


13

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.


8

SHELLwird von POSIX angegeben . Zitat:

SHELL Diese Variable soll einen Pfadnamen des bevorzugten Befehlsspracheninterpreters des Benutzers darstellen. [...]

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.


-3

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 userWenn ich das tue echo $SHELL, wird die angezeigte Shell immer noch angezeigt BASH.

siehe diesen Artikel .


4
Der Artikel, auf den Sie verlinken, ist falsch. Das ist umgekehrt, dh SHELL speichert Ihre Standard-Login-Shell (zum letzten Login-Zeitpunkt), die manchmal mit Ihrer übergeordneten Shell übereinstimmt. Diese Variable wird niemals von Ihrem übergeordneten oder aktuellen Shell geändert. Die einzige Aktion, die sie ausführen könnten, ist die Einstellung, wenn sie (unerwartet) deaktiviert wird.
Juli
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.