即使将默认 shell 更改为 zsh 后,echo $SHELL 也会将“/bin/bash”显示为输出

即使将默认 shell 更改为 zsh 后,echo $SHELL 也会将“/bin/bash”显示为输出

我参考了这个答案来更改我的默认外壳如何将默认 shell 更改为 ZSH - chsh 显示“无效 shell”

添加 zsh/etc/shells并执行后,sudo chsh -s "$(command -v zsh)" "${USER}"我运行了echo $SHELL(顺便说一句,它没有输出,所以我认为它一定已经成功运行),它给了我/bin/bash

我关闭了 shell 并打开了一个新的 shell 会话,zsh 出现了,所以我认为它一定是通过重新启动来修复的,之后当我echo $SHELL在 zsh 会话中运行时,它仍然给了我相同的输出,/bin/bash``$SHELL --version也给了我 bash 版本而不是zsh 的一个

每次我执行 ctrl+alt+t 操作时,我都会得到一个 zsh 会话,但这个echo $SHELL输出让我感到怀疑。

更新:我正在运行 Ubuntu Budgie 18.04.3,我/bin/zshecho $0

答案1

仅当您执行完全登录时才会设置环境SHELL变量,例如注销并再次登录,或者使用su - "$USER"ssh "$USER@localhost"或执行完全登录的其他命令。

通常是login程序根据数据库中用户的登录 shell 的内容来设置此变量passwd。无论任何进程接受来自用户的登录请求(例如通过sshdgdm等等),这都会被称为登录过程的一部分。

来自login(1)Ubuntu 的手册:

您的用户和组 ID 将根据/etc/passwd文件中的值进行设置。$HOME$SHELL$PATH$LOGNAME和的值 $MAIL根据密码条目中的相应字段进行设置。 Ulimit、umask 和nice 值也可以根据GECOS 字段中的条目进行设置。

仅启动一个新的 shell 会话不会设置此变量的值,即使 shell 作为“登录 shell”启动也是如此。

答案2

想要补充 Kusalananda 优秀且被接受的答案:

在 macOS 上,如果您想在不退出 GUI 的情况下查看更改,您可以在终端中输入以下内容:

$ logout [your username]

然后打开一个新的终端会话并输入:

echo $SHELL

您将看到新的环境设置。

相关内容