Jack Thomson Asked: 2019-06-05 12:16:38 +0800 CST2019-06-05 12:16:38 +0800 CST 2019-06-05 12:16:38 +0800 CST 使用 bash 后 SHELL 环境变量仍指向 zsh 772 我试图在 zsh 和 bash 之间跳转。 默认情况下,我有 zsh 作为我的 shell,我可以通过键入以下内容来了解这一点: echo $SHELL我得到/bin/zsh 但是,我想打开 Bash,所以我输入/bin/bash; 我假设我现在在 bash 中,但如果我回显$SHELL我仍然会得到/bin/zsh 请问怎么了? bash shell 2 个回答 Voted Best Answer Jeff Schaller 2019-06-05T12:26:46+08:002019-06-05T12:26:46+08:00 SHELL 是在调用 zsh 时从 bash 传递给 zsh 的环境变量。SHELL 不是zsh 中Shell 设置的参数之一,因此它的值保持不变。 bash$ SHELL=turtle zsh zsh$ echo $SHELL turtle 有关您在 zsh shell 中的迹象,请尝试: echo $ZSH_NAME echo $0 该SHELL变量传统上由login程序设置,“由密码数据库指定”。(复制自What sets the $SHELL environment variable?) user232326 2019-06-05T13:29:50+08:002019-06-05T13:29:50+08:00 许多 shell 在启动时设置了一个版本变量。 bash使用 BASH_VERSION 并zsh使用 ZSH_VERSION。 将这两个变量设置为已知值将可靠地检测启动了哪个 shell: BASH_VERSION=notbash ZSH_VERSION=notzsh sh -c 'echo "$BASH_VERSION $ZSH_VERSION"' notbash 5.3.1如果 sh 是 zsh 或5.0.2(2)-release notzshsh 是 bash,将打印。 可悲的是,在使用带有字符串值的 KSH_VERSION 时,ksh 段错误。
SHELL 是在调用 zsh 时从 bash 传递给 zsh 的环境变量。SHELL 不是zsh 中Shell 设置的参数之一,因此它的值保持不变。
有关您在 zsh shell 中的迹象,请尝试:
该
SHELL
变量传统上由login
程序设置,“由密码数据库指定”。(复制自What sets the $SHELL environment variable?)许多 shell 在启动时设置了一个版本变量。
bash
使用 BASH_VERSION 并zsh
使用 ZSH_VERSION。将这两个变量设置为已知值将可靠地检测启动了哪个 shell:
notbash 5.3.1
如果 sh 是 zsh 或5.0.2(2)-release notzsh
sh 是 bash,将打印。可悲的是,在使用带有字符串值的 KSH_VERSION 时,ksh 段错误。