Die Umgebungsvariable SHELL gibt immer den Wert der Standard-Shell zurück

Die Umgebungsvariable SHELL gibt immer den Wert der Standard-Shell zurück

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.

verwandte Informationen