我正在尝试在 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 notzsh
sh 是 bash,将会打印。
遗憾的是,当使用带有字符串值的 KSH_VERSION 时,ksh 会出现段错误。