无法从 zsh 切换到 bash

无法从 zsh 切换到 bash

在新的 Mac 上,尝试切换到 bash:

alex.mills@alex uta-phd %
alex.mills@alex uta-phd % echo $SHELL
/bin/zsh
alex.mills@alex uta-phd %
alex.mills@alex uta-phd % exec bash

The default interactive shell is now zsh.
To update your account to use zsh, please run `chsh -s /bin/zsh`. 
For more details, please visit https://support.apple.com/kb/HT208050.
%na%m %1~ %#
%na%m %1~ %# echo $SHELL
/bin/zsh
%n@%m %1~ %#

echo "$SHELL"一直说我正在使用/bin/zsh

该怎么办?

答案1

运行 bash。这就是为什么提示看起来很奇怪。 Bash 和 zsh 都使用PS1变量作为提示符的主要设置,但它们具有不同的转义序列(bash 中的反斜杠字符,zsh 中的百分号字符,第二个字符具有不同的含义)。

通常该变量应该由 shell 的初始化文件 (或)PS1设置,而不是导出到环境中(因为它只在一个给定程序中有意义),但许多系统(包括主要的 Linux 发行版)配置和导出都很糟糕。据我所知,MacOS 无法正确地开箱即用导出,但似乎您自己的文件可以(或者可能是与我检查的版本不同的 macOS 版本),并且由于某种原因,macOS 上的系统特别不这样做如果已经设置,则进行更改。.bashrc.zshrcPS1PS1bashrcPS1

环境SHELL变量并不指示您正在运行什么 shell。它表明你是什么外壳跑步。它告诉想要启动 shell 的程序要运行哪个 shell。仅手动运行另一个 shell 不会改变$SHELL

如果您看到 shell 提示符并且不确定正在运行什么 shell,可以使用 进行检查ps。在所有 Bourne 风格的 shell(sh、ash、bash、ksh、zsh 等)中,$$代表 shell 的进程 ID,从而ps $$告诉您当前 shell 是什么程序。在 Fish 中,您会收到一个错误,这表明您正在运行 Fish,因为$$在那里无效。

答案2

你为什么要努力exec bash?要启动bashshell,只需运行bash.对于充当登录 shell 的 shell,请使用bash -l。要将您的 shell 永久更改为bash,请使用chsh.

答案3

你后来换了外壳吗?如果不是,则调用chsh -s $(which bash)echo $SHELL

相关内容