Ich versuche, zwischen zsh und bash zu wechseln.
Standardmäßig habe ich zsh als meine Shell. Dies erfahre ich, indem ich Folgendes eingebe:
echo $SHELL
und 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, $SHELL
bekomme 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 SHELL
Variable wird traditionell vom login
Programm gesetzt, „wie von der Passwortdatenbank angegeben“. (Kopiert vonWas legt die Umgebungsvariable $SHELL fest?)
Antwort2
Viele Shells setzen beim Start eine Versionsvariable.
bash
Verwenden Sie BASH_VERSION und zsh
ZSH_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 notzsh
bash ist.
Leider verursacht ksh einen Segmentierungsfehler, wenn KSH_VERSION mit einem Zeichenfolgenwert verwendet wird.