Die Umgebungsvariable SHELL verweist nach der Verwendung von Bash immer noch auf zsh

Die Umgebungsvariable SHELL verweist nach der Verwendung von Bash immer noch auf zsh

Ich versuche, zwischen zsh und bash zu wechseln.

Standardmäßig habe ich zsh als meine Shell. Dies erfahre ich, indem ich Folgendes eingebe:

echo $SHELLund ich bekomme/bin/zsh

Ich möchte jedoch Bash öffnen, also tippe ich /bin/bash; Ich gehe davon aus, dass ich jetzt in Bash bin, aber wenn ich echo gebe, $SHELLbekomme ich immer noch/bin/zsh

Was ist los, bitte?

Antwort1

SHELL ist eine Umgebungsvariable, die von bash an zsh übergeben wird, wenn Sie zsh aufrufen. SHELL ist keine derVon der Shell festgelegte Parameterin zsh, daher bleibt sein Wert unverändert.

bash$ SHELL=turtle zsh
zsh$ echo $SHELL
turtle 

Um Hinweise darauf zu erhalten, dass Sie sich in einer ZSH-Shell befinden, versuchen Sie Folgendes:

echo $ZSH_NAME
echo $0

Die SHELLVariable wird traditionell vom loginProgramm gesetzt, „wie von der Passwortdatenbank angegeben“. (Kopiert vonWas legt die Umgebungsvariable $SHELL fest?)

Antwort2

Viele Shells setzen beim Start eine Versionsvariable.

bashVerwenden Sie BASH_VERSION und zshZSH_VERSION.

Wenn Sie beide Variablen auf einen bekannten Wert setzen, wird zuverlässig erkannt, welche Shell gestartet wurde:

BASH_VERSION=notbash ZSH_VERSION=notzsh sh -c 'echo "$BASH_VERSION $ZSH_VERSION"'

wird gedruckt notbash 5.3.1, wenn sh zsh oder 5.0.2(2)-release notzshbash ist.

Leider verursacht ksh einen Segmentierungsfehler, wenn KSH_VERSION mit einem Zeichenfolgenwert verwendet wird.

verwandte Informationen