我使用以 bash 作為預設 shell 的終端模擬器,然後列印環境變數 SHELL 的值來列印當前 shell,確實如此,但是當我進入另一個 shell(即 zshell)時,它會繼續返回預設一.
如何讓它列印出我所在的目前 shell 的值?
$ echo $SHELL
/bin/bash
$ zsh
unixnode%
$ unixnode% echo $SHELL
/bin/bash
答案1
當您使用登入 shell 登入時, shell 變數將會被指派給該 shell 。
每當您使用非登入 shell 時,例如簡單地從目前登入 shell 工作階段中執行 zsh,變數 Shell 的值將保持不變,但如果您想將其變更為其他 shell,那麼您將必須登出並重新登入另一個shell。
答案2
如何列印出我所在的目前 shell 的值
這取決於外殼。對於 POSIX 類型的 shell,請使用$0
$ bash -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
bash
$ /bin/bash -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
/bin/bash
$ zsh -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
zsh
$ ksh -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
ksh
$ dash -c 'echo $SHELL; echo $0'
/usr/local/bin/fish
dash
bash手冊有這是關於 $SHELL 的事
關於不同 shell 的一些更有趣的事情初始化$殼牌
$ unset SHELL; bash -c 'echo $SHELL'
/usr/local/bin/fish
$ unset SHELL; ksh -c 'echo $SHELL'
/bin/sh
$ unset SHELL; zsh -c 'echo $SHELL'
$ unset SHELL; dash -c 'echo $SHELL'
$ unset SHELL; fish -c 'echo $SHELL'
$ unset SHELL; tcsh -c 'echo $SHELL'
SHELL: Undefined variable.