操作系统从哪里获取 $OSTYPE 的值

Dmi*_*nov 1 bash jenkins os-detection

我有一个依赖于$OSTYPE变量值的遗留脚本。该脚本期望在 Solaris 上该值为“SunOS”,而在 AIX 上该值为“AIX”。对于 Linux,它根据正则表达式检查变量,其中大写值以“LINUX”开头。

我尝试从 Jenkins 运行此脚本,发现值不同:Solaris 返回“solaris2.11”,而 AIX 返回“aix7.1.0.0”。我echo $OSTYPE在 Jenkins 运行脚本的同一台服务器上运行了该命令,并且得到了“SunOS”/“AIX”。

所以我的主要问题是:这种差异的根源是什么(系统如何形成这个变量的值,以及为什么 Jenkins 具有与从 bash 运行的 echo 不同的值)。一个附带问题是哪种是可靠的使用方式$OSTYPE

Rom*_*nov 6

最可靠的方法是使用命令:

uname
Run Code Online (Sandbox Code Playgroud)

有不同的选择。你看到的结果只是命令uname。如果您想了解有关版本、架构的更多详细信息,可以使用

uname -a
Run Code Online (Sandbox Code Playgroud)


Sam*_*mit 5

该变量OSTYPE将 OS TYPE 的值存储在 shell 变量中。这取决于 shell 存储的值。

例如,如果您使用bash,您将获得OSTYPE变量的一个值, in zsh,一些其他值,并且 in sh,您可能无法获得任何值本身。

bash请参阅下面使用和的区别zsh

巴什

$ echo $OSTYPE
  darwin18
Run Code Online (Sandbox Code Playgroud)

桀骜

% echo $OSTYPE
  darwin18.0
Run Code Online (Sandbox Code Playgroud)

jenkins因此,当您获得不同的值时,您可能需要检查 shell 正在使用什么OSTYPE

  • 如果 Jenkins 使用 zsh 确实会很奇怪,因为它与 POSIX 有一些语法差异。 (2认同)