使用bash後SHELL環境變數仍然指向zsh

使用bash後SHELL環境變數仍然指向zsh

我正在嘗試在 zsh 和 bash 之間跳躍。

預設情況下,我使用 zsh 作為我的 shell,我可以透過輸入以下內容來了解這一點:

echo $SHELL我得到/bin/zsh

但是,我想打開 Bash,所以我輸入/bin/bash;我假設我現在在 bash 中,但如果我回顯,$SHELL我仍然會得到/bin/zsh

請問怎麼了?

答案1

SHELL 是一個環境變量,當您呼叫 zsh 時,它會從 bash 傳遞到 zsh。 SHELL 不是其中之一Shell 設定的參數在 zsh 中,所以它的值保持不變。

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

若要了解您是否處於 zsh shell 中,請嘗試:

echo $ZSH_NAME
echo $0

SHELL變數傳統上由程式設置login,“由密碼資料庫指定”。 (複製自什麼設定 $SHELL 環境變數?

答案2

許多 shell 在啟動時設定版本變數。

bash使用 BASH_VERSION 並zsh使用 ZSH_VERSION。

將兩個變數設定為已知值將可靠地偵測啟動了哪個 shell:

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

notbash 5.3.1如果 sh 是 zsh 或5.0.2(2)-release notzshsh 是 bash,將會列印。

遺憾的是,ksh 在將 KSH_VERSION 與字串值一起使用時出現段錯誤。

相關內容