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
多くのシェルは起動時にバージョン変数を設定します。
bash
BASH_VERSION を使用し、zsh
ZSH_VERSION を使用します。
両方の変数を既知の値に設定すると、どのシェルが起動されたかを確実に検出できます。
BASH_VERSION=notbash ZSH_VERSION=notzsh sh -c 'echo "$BASH_VERSION $ZSH_VERSION"'
notbash 5.3.1
sh が zsh か5.0.2(2)-release notzsh
bash かを出力します。
残念なことに、文字列値で KSH_VERSION を使用すると、ksh はセグメント違反を起こします。