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

本文讨论了如何在Bash脚本中检测操作系统类型,包括使用$OSTYPE变量、uname命令以及不同用户的解决方案,以实现脚本在Mac OS X、Linux和Cygwin等平台间的兼容性。
摘要由CSDN通过智能技术生成

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

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


#1楼

我建议避免一些这些答案。 不要忘记您可以选择其他形式的字符串比较,这将清除大多数变体或提供的丑陋代码。

一个这样的解决方案是简单的检查,例如:

if [[ "$OSTYPE" =~ ^darwin ]]; then

除了版本后缀之外,它还具有匹配任何版本的Darwin的额外好处。 这也适用于人们可能期望的Linux任何变体。

你可以看到我的点文件中的一些附加的例子在这里


#2楼

执行以下操作有助于为ubuntu正确执行检查:

if [[ "$OSTYPE" =~ ^linux ]]; then
    sudo apt-get install <some-package>
fi

#3楼

$OSTYPE

您可以简单地使用预定义的$OSTYPE变量,例如:

case "$OSTYPE" in
  solaris*) echo "SOLARIS" ;;
  darwin*)  echo "OSX" ;; 
  linux*)   echo "LINUX" ;;
  bsd*)     echo "BSD" ;;
  msys*)    echo "WINDOWS" ;;
  *)        echo "unknown: $OSTYPE" ;;
esac

但是旧版的shell (例如Bourne shell无法识别它。


uname

另一种方法是基于uname命令检测平台。

请参阅以下脚本(准备包含在.bashrc中):

# Detect the platform (similar to $OSTYPE)
OS="`uname`"
case $OS in
  'Linux')
    OS='Linux'
    alias ls='ls --color=auto'
    ;;
  'FreeBSD')
    OS='FreeBSD'
    alias ls='ls -G'
    ;;
  'WindowsNT')
    OS='Windows'
    ;;
  'Darwin') 
    OS='Mac'
    ;;
  'SunOS')
    OS='Solaris'
    ;;
  'AIX') ;;
  *) ;;
esac

你可以在我的.bashrc找到一些实际的例子


以下是Travis CI上使用的类似版本:

case $(uname | tr '[:upper:]' '[:lower:]') in
  linux*)
    export TRAVIS_OS_NAME=linux
    ;;
  darwin*)
    export TRAVIS_OS_NAME=osx
    ;;
  msys*)
    export TRAVIS_OS_NAME=windows
    ;;
  *)
    export TRAVIS_OS_NAME=notset
    ;;
esac

#4楼

这应该可以安全地用于所有发行版。

$ cat /etc/*release

这产生了这样的东西。

     DISTRIB_ID=LinuxMint
     DISTRIB_RELEASE=17
     DISTRIB_CODENAME=qiana
     DISTRIB_DESCRIPTION="Linux Mint 17 Qiana"
     NAME="Ubuntu"
     VERSION="14.04.1 LTS, Trusty Tahr"
     ID=ubuntu
     ID_LIKE=debian
     PRETTY_NAME="Ubuntu 14.04.1 LTS"
     VERSION_ID="14.04"
     HOME_URL="http://www.ubuntu.com/"
     SUPPORT_URL="http://help.ubuntu.com/"
     BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"

根据需要提取/分配变量

注意:在某些设置上。 这也可能会给您一些您可以忽略的错误。

     cat: /etc/upstream-release: Is a directory

#5楼

我倾向

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值