SHELL環境變數不斷回傳預設shell的值

SHELL環境變數不斷回傳預設shell的值

我使用以 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.

相關內容