我使用终端仿真器并以 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.