SHELL 环境变量不断返回默认 shell 的值

SHELL 环境变量不断返回默认 shell 的值

我使用终端仿真器并以 bash 作为默认 shell,然后打印环境变量 SHELL 的值以打印当前 shell,确实如此,但是当我进入另一个 shell 即 zshell 时,它一直返回默认 shell 的第一个值。
如何让它打印出我所在的当前 shell 的值?

$ echo $SHELL 
/bin/bash

$ zsh 
unixnode% 

$ unixnode% echo $SHELL 
/bin/bash

答案1

当您使用登录 shell 登录时,shell 变量将被分配给该 shell。
每当您使用非登录 shell(例如,在当前登录 shell 会话中简单地运行 zsh)时,变量 Shell 的值将保持不变,但是如果您想将其更改为其他 shell,则必须注销并重新登录其他 shell。

答案2

如何打印出我当前所在的 shell 的值

这取决于 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.

相关内容