SHELL環境変数はbashを使用した後もzshを指しています

SHELL環境変数はbashを使用した後もzshを指しています

zsh と bash の間を行き来しようとしています。

デフォルトでは、シェルとして zsh が設定されています。次のように入力するとこれを確認できます。

echo $SHELLそして私は/bin/zsh

しかし、Bashを開きたいので、/bin/bash;と入力します。これでbashに入ったと思いますが、echoすると$SHELL/bin/zsh

どうしたんですか?

答え1

SHELLは、zshを呼び出すときにbashからzshに渡される環境変数です。SHELLは、シェルによって設定されるパラメータzsh では、その値はそのまま残ります。

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

zsh シェルを使用しているかどうかを確認するには、次を試してください。

echo $ZSH_NAME
echo $0

変数は、通常、パスワード データベースで指定されたとおりにプログラムSHELLによって設定されます。(login$SHELL 環境変数を設定するものは何ですか?

答え2

多くのシェルは起動時にバージョン変数を設定します。

bashBASH_VERSION を使用し、zshZSH_VERSION を使用します。

両方の変数を既知の値に設定すると、どのシェルが起動されたかを確実に検出できます。

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

notbash 5.3.1sh が zsh か5.0.2(2)-release notzshbash かを出力します。

残念なことに、文字列値で KSH_VERSION を使用すると、ksh はセグメント違反を起こします。

関連情報