我正在嘗試在 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 notzsh
sh 是 bash,將會列印。
遺憾的是,ksh 在將 KSH_VERSION 與字串值一起使用時出現段錯誤。