【问题标题】:how can I recognize which OS I am on in a bash script [duplicate]如何识别我在 bash 脚本中使用的操作系统 [重复]
【发布时间】:2013-04-27 16:26:38
【问题描述】:

我需要制作每个系统行为不同的脚本。今天甚至可以在 microsoft windows、mac、linux、hp-ux、solaris 等上运行 bash...

如何确定我使用的是这些操作系统中的哪一个?我不需要确切的版本,我只需要知道我是在 windows、linux、solaris 上...

【问题讨论】:

  • 是的,很可能是一样的,但我不会删除这个,只是因为我想有些用户会搜索我问的内容,我在谷歌上搜索并找不到链接的答案跨度>

标签: bash


【解决方案1】:

有一个标准的shell命令“uname”以字符串形式返回当前平台

要在 shell 程序中使用它,典型的节可能是

#!/bin/sh



if [ `uname` = "Linux" ] ;
then
    echo "we are on the operating system of Linux"
fi

if [ `uname` = "FreeBSD" ] ;
then
    echo "we are on the operating system of FreeBSD"
fi

提供更具体的信息,但不幸的是,它因平台而异。在许多版本的 Linux(和 ISTR、Solaris)上,都有一个 /etc/issue 文件,其中包含已安装发行版的版本名称和编号。所以在ubuntu上

if [ -e "/etc/issue" ] ;
then
issue=`cat /etc/issue`
set -- $issue
if [ $1 = "Ubuntu" ] ;
then
    echo "we are on Ubuntu version " $2
fi
fi

这将提供版本信息

【讨论】:

  • @ChetterHummin 这个帖子有什么问题?这是正确的。在终端中输入uname 即可查看
  • @ChetterHummin 添加了大量附加信息
【解决方案2】:

我会看看输出

uname -a

并查找可以帮助您识别系统的特定字符串。

或更具体

uname -s

对于 Windows,您的意思是 cygwin 之类的吗?

【讨论】:

    【解决方案3】:

    bash 有一个名为$OSTYPE 的全局变量。输入 echo $OSTYPE 即可查看:

    echo "$OSTYPE"
    // linux-gnu
    

    来自bash man page

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


    另一种方法是使用uname 命令(不带任何参数)或uname -s,它与uname 相同,默认为-s

    Linux 上的示例

    uname
    // Linux
    

    【讨论】:

    • -o 在 HP-UX 上不为人所知
    • 从未登录过这样的盒子。我应该这样做:) 你有什么建议? -s ?这是我以前的。不确定
    • 是的,-s 为您提供操作系统。普通的 'uname' 应该是 'uname -s' 的快捷方式,但我想明确一点也没有什么坏处。
    • -s 为您提供kernel 而不是操作系统。但我和你在一起,看起来这就是 OP 正在寻找的东西
    • 好吧,比我想说的 -s ,或者没有参数,作为它的默认值,是正确的。不是吗?
    猜你喜欢
    • 1970-01-01
    • 2018-08-02
    • 2012-04-29
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 2016-06-08
    • 2011-08-24
    相关资源
    最近更新 更多