我在家中和工作中使用几种不同的操作系统,并且希望能够有条件地加载特定于platorm的ZSH设置,具体取决于我在给定时刻使用的是哪种操作系统。
我尝试了此操作,但它无法加载我期望的所有内容:
# Condtitional loading of zsh settings per platform
if command apt > /dev/null; then
source $ZSH_CUSTOM/os/debian.zsh
elif command systemctl > /dev/null; then
source $ZSH_CUSTOM/os/systemd.zsh
elif command freebsd-version > /dev/null; then
source $ZSH_CUSTOM/os/freebsd.zsh
elif [[ `uname` == "Darwin" ]]; then
source $ZSH_CUSTOM/os/mac.zsh
elif command kubectl > /dev/null; then
source $ZSH_CUSTOM/os/kubernetes.zsh
else
echo 'Unknown OS!'
fi
进行此检测的最佳方法是什么,我做错了什么?
我知道我的这种方法不起作用,因为当我运行zsh -o SOURCE_TRACE
时,它不会显示所有想要的源文件。
谢谢!
答案 0 :(得分:1)
我在Reddit here上回答了完全相同的问题,因此要结束循环,这是我写的内容:
您当前的逻辑从字面上说,例如,Debian系统可能无法运行systemd或Kubernetes,这显然是不正确的。正是if...elif...else...fi
实现的:相互排他性。
在我看来,仅特定于操作系统的测试需要相互排斥,因此您可能正在寻找类似的东西:
# What OS are we running?
if command apt > /dev/null; then
source $ZSH_CUSTOM/os/debian.zsh
elif command freebsd-version > /dev/null; then
source $ZSH_CUSTOM/os/freebsd.zsh
elif [[ `uname` == "Darwin" ]]; then
source $ZSH_CUSTOM/os/mac.zsh
else
echo 'Unknown OS!'
fi
# Do we have systemd on board?
if command systemctl > /dev/null; then
source $ZSH_CUSTOM/os/systemd.zsh
fi
# Ditto Kubernetes?
if command kubectl > /dev/null; then
source $ZSH_CUSTOM/os/kubernetes.zsh
fi
答案 1 :(得分:0)
验证操作系统取决于系统。您可以使用程序包管理器来验证特定的发行版,但这不是必需的,因为肯定还有其他相同的程序包管理器也具有其他发行版。
您可以尝试在正确的发行版上使用lsb_release和grep。或使用uname。
哪些OS不会加载到脚本中,哪些会加载?
另外,看看here