在新的 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 中的百分号字符,第二个字符具有不同的含义)。
通常该PS1
变量应该由 shell 的初始化文件 (.bashrc
或.zshrc
) 设置,而不是导出到环境中(因为它只在一个给定程序中有意义),但许多系统(包括主要的 Linux 发行版)配置和导出都很糟糕PS1
。据我所知,MacOS 无法正确地PS1
开箱即用导出,但似乎您自己的文件可以(或者可能是与我检查的版本不同的 macOS 版本),并且由于某种原因,bashrc
macOS 上的系统特别不这样做PS1
如果已经设置,则进行更改。
环境SHELL
变量并不指示您正在运行什么 shell。它指示您要运行的shell 。它告诉想要启动 shell 的程序要运行哪个 shell。仅手动运行另一个 shell 不会改变$SHELL
。
如果您看到 shell 提示符并且不确定正在运行什么 shell,可以使用 进行检查ps
。在所有 Bourne 风格的 shell(sh、ash、bash、ksh、zsh、\xe2\x80\xa6)中,$$
代表 shell 的进程 ID,从而ps $$
告诉您当前 shell 是什么程序。在 Fish 中,您会收到一个错误,这表明您正在运行 Fish,因为$$
在那里无效。