如何有条件地检测操作系统并加载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设置?的主要内容,如果未能解决你的问题,请参考以下文章

有条件地加载并执行外部 js 文件

iPhone:有条件地加载视图

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

条件片段和导航重用

如何有条件地加载 CSS

从文件系统有条件地加载分区