使用bash后SHELL环境变量仍然指向zsh

使用bash后SHELL环境变量仍然指向zsh

我正在尝试在 zsh 和 bash 之间跳转。

默认情况下,我使用 zsh 作为我的 shell,我可以通过输入以下内容来了解​​这一点:

echo $SHELL我得到/bin/zsh

但是,我想打开 Bash,所以我输入/bin/bash;我假设我现在在 bash 中,但如果我回显,$SHELL我仍然会得到/bin/zsh

请问怎么了?

答案1

SHELL 是一个环境变量,当您调用 zsh 时,它会从 bash 传递到 zsh。 SHELL 不是其中之一Shell 设置的参数在 zsh 中,所以它的值保持不变。

bash$ SHELL=turtle zsh
zsh$ echo $SHELL
turtle 

要了解您是否处于 zsh shell 中,请尝试:

echo $ZSH_NAME
echo $0

SHELL变量传统上由程序设置login,“由密码数据库指定”。 (复制自什么设置 $SHELL 环境变量?

答案2

许多 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 会出现段错误。

相关内容