如何从Bash脚本检测操作系统?

我想将我的.bashrc.bash_login文件保存在版本控制中,以便我可以在所有使用的计算机之间使用它们。 问题是我有一些操作系统特定的别名,所以我正在寻找一种方法来确定脚本是否在Mac OS X,Linux或Cygwin上运行。

在Bash脚本中检测操作系统的正确方法是什么?


对于我的.bashrc,我使用下面的代码:

platform='unknown'
unamestr=`uname`
if [[ "$unamestr" == 'Linux' ]]; then
   platform='linux'
elif [[ "$unamestr" == 'FreeBSD' ]]; then
   platform='freebsd'
fi

然后我做一些事情如:

if [[ $platform == 'linux' ]]; then
   alias ls='ls --color=auto'
elif [[ $platform == 'freebsd' ]]; then
   alias ls='ls -G'
fi

这是丑陋的,但它的工作原理。 您可以使用case ,而不是if ,如果你喜欢。


bash manpage说变量OSTYPE存储操作系统的名字:

OSTYPE自动设置为描述执行bash的操作系统的字符串。 默认值是系统相关的。

它在这里设置为linux-gnu


我认为以下应该工作。 虽然我不确定win32

if [[ "$OSTYPE" == "linux-gnu" ]]; then
        # ...
elif [[ "$OSTYPE" == "darwin"* ]]; then
        # Mac OSX
elif [[ "$OSTYPE" == "cygwin" ]]; then
        # POSIX compatibility layer and Linux environment emulation for Windows
elif [[ "$OSTYPE" == "msys" ]]; then
        # Lightweight shell and GNU utilities compiled for Windows (part of MinGW)
elif [[ "$OSTYPE" == "win32" ]]; then
        # I'm not sure this can happen.
elif [[ "$OSTYPE" == "freebsd"* ]]; then
        # ...
else
        # Unknown.
fi
链接地址: http://www.djcxy.com/p/68305.html

上一篇: How to detect the OS from a Bash script?

下一篇: How to build () => new { x.prop} lambda expression dynamically?