如何有条件地检测操作系统并加载ZSH设置?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何有条件地检测操作系统并加载ZSH设置?相关的知识,希望对你有一定的参考价值。
我在家和工作中使用了几种不同的操作系统,我希望能够有条件地加载特定于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
时,它没有显示所有需要的文件来源。
提前致谢!
答案
我在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
另一答案
验证操作系统取决于系统。您可以使用包管理器来验证某个分发,但这不是必需的,因为肯定有其他发行版也是同一个包管理器。
您可以尝试在正确的分布上使用lsb_release和grep。或者使用uname。
您的脚本中没有加载哪些操作系统,哪些操作系统可以加载?
另外,看看here
以上是关于如何有条件地检测操作系统并加载ZSH设置?的主要内容,如果未能解决你的问题,请参考以下文章