无法从 zsh 切换到 bash

Ale*_*lls 1 shell bash zsh

在新的 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~ %#
Run Code Online (Sandbox Code Playgroud)

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

该怎么办?

Gil*_*il' 17

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

\n

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

\n

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

\n

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

\n

  • 通常还可以使用“echo $0”来查看当前正在运行哪个 shell。 (3认同)