Ich verwende einen Terminalemulator mit Bash als Standard-Shell und drucke dann den Wert der Umgebungsvariable SHELL aus, um die aktuelle Shell zu drucken, und das hat funktioniert, aber wenn ich eine andere Shell öffne, z. B. zshell, gibt es immer den ersten Wert der Standard-Shell zurück.
Wie bringe ich es dazu, den Wert der aktuellen Shell auszudrucken, in der ich mich befinde?
$ echo $SHELL
/bin/bash
$ zsh
unixnode%
$ unixnode% echo $SHELL
/bin/bash
Antwort1
Wenn Sie mit einer Login-Shell angemeldet sind, wird die Shell-Variable dieser Shell zugewiesen.
Wenn Sie eine Nicht-Login-Shell verwenden, z. B. indem Sie zsh einfach innerhalb der aktuellen Login-Shell-Sitzung ausführen, bleibt der Wert der Variablen Shell gleich. Wenn Sie ihn jedoch in die andere Shell ändern möchten, müssen Sie sich abmelden und erneut bei der anderen Shell anmelden.
Antwort2
Wie kann ich den Wert der aktuellen Shell ausdrucken, in der ich mich befinde?
Das hängt von der Shell ab. Für Shells vom Typ POSIX verwenden Sie$0
$ bash -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
bash
$ /bin/bash -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
/bin/bash
$ zsh -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
zsh
$ ksh -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
ksh
$ dash -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
dash
Das Bash-Handbuch hatFolgendes zu $SHELL
Einige weitere interessante Dinge über die verschiedenen Muschelninitialisieren$SHELL
$ unset SHELL; bash -c 'echo $SHELL'
/usr/local/bin/fish
$ unset SHELL; ksh -c 'echo $SHELL'
/bin/sh
$ unset SHELL; zsh -c 'echo $SHELL'
$ unset SHELL; dash -c 'echo $SHELL'
$ unset SHELL; fish -c 'echo $SHELL'
$ unset SHELL; tcsh -c 'echo $SHELL'
SHELL: Undefined variable.