gpt4 book ai didi

bash - 如何使用 zsh 或 bash 让 shell 进行 self 检测

转载 作者:行者123 更新时间:2023-11-29 08:40:47 25 4
gpt4 key购买 nike

我有一个关于如何判断用户正在使用哪个 shell 的问题。假设一个脚本,如果用户使用 zsh,则将 PATH 放入他的 .zshrc,如果使用 bash,则应放入 .bashrc。并相应地设置 rvmrc。

#!/usr/bin/env bash
export PATH='/usr/local/bin:$PATH' >> ~/.zshrc
source ~/.zshrc

我已经尝试了以下但它不起作用:(

if [[ $0 == "bash" ]]; then
export PATH='/usr/local/bin:$PATH' >> ~/.bashrc
elif [[ $0 == "zsh" ]]; then
export PATH='/usr/local/bin:$PATH' >> ~/.zshrc
fi

# ... more commands ...

if [[ $0 == "bash" ]]; then
[[ -s '/Users/`whoami`/.rvm/scripts/rvm' ]] && source '/Users/`whoami`/.rvm/scripts/rvm' >> ~/.bashrc
source ~/.bashrc
elif [[ $0 == "zsh" ]]; then
[[ -s '/Users/`whoami`/.rvm/scripts/rvm' ]] && source '/Users/`whoami`/.rvm/scripts/rvm' >> ~/.zshrc
source ~/.zshrc
fi

最佳答案

如果 shell 是 Zsh,变量 $ZSH_VERSION 被定义。对于 Bash 和 $BASH_VERSION 也是如此。

if [ -n "$ZSH_VERSION" ]; then
# assume Zsh
elif [ -n "$BASH_VERSION" ]; then
# assume Bash
else
# assume something else
fi

但是,这些变量仅告诉您正在使用哪个 shell 来运行上述代码。因此,您必须在用户的 shell 中获取该片段。

作为替代方案,您可以使用 $SHELL 环境变量(它应该包含用户首选 shell 的绝对路径)并根据该变量的值猜测 shell:

case $SHELL in
*/zsh)
# assume Zsh
;;
*/bash)
# assume Bash
;;
*)
# assume something else
esac

当然,当 /bin/sh/bin/bash 的符号链接(symbolic link)时,上述操作将会失败。

如果你想依赖$SHELL,实际执行一些代码会更安全:

if [ -n "$($SHELL -c 'echo $ZSH_VERSION')" ]; then
# assume Zsh
elif [ -n "$($SHELL -c 'echo $BASH_VERSION')" ]; then
# assume Bash
else
# assume something else
fi

无论使用哪个 shell 运行脚本,最后一个建议都可以从脚本运行。

关于bash - 如何使用 zsh 或 bash 让 shell 进行 self 检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9910966/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com