【问题标题】:Where does the OS take the value for $OSTYPE操作系统在哪里获取 $OSTYPE 的值
【发布时间】:2020-03-30 18:20:10
【问题描述】:

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

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

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

【问题讨论】:

  • 这个变量是由 Bash 设置的。不在一个我可以检查它的历史以查看它是否改变以及何时改变的地方。
  • @tripleee 我尝试从 bash、sh 和 Solaris 服务器上可用的其他 shell 运行 echo $OSTYPE:一切都与“SunOS”相呼应。 Solaris 中的 Groovy 使用 sh 命令(它是一个 'sh' shell 调用吗?)我很好奇 Jenkins 是从哪里获取这些值的。
  • 更新:zsh 返回“solaris2.11”,但在 AIX 上仍返回“aix”。

标签: bash jenkins os-detection


【解决方案1】:

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

例如,如果您使用bash,您将获得OSTYPE 变量的一个值,在zsh 中,另一个值,在sh 中,您可能不会获得任何值本身。

请参阅下面使用bashzsh 的区别。

重击

$ echo $OSTYPE
  darwin18

zsh

% echo $OSTYPE
  darwin18.0

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

【讨论】:

  • 这部分回答了我的问题。 zsh 的回显在 Solaris 上确实返回了“solaris2.11”,但这并不能解释 AIX 上的问题:它仍然返回从 zsh 手动运行的“aix”。无论如何,谢谢,我正在尝试确定 Jenkins 在 AIX 上使用哪个 shell。
  • 我无权访问任何 AIX 机器来进一步检查。
  • 如果 Jenkins 使用 zsh 确实会很奇怪,因为它与 POSIX 有一些语法差异。
【解决方案2】:

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

uname

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

uname -a

【讨论】:

  • 这些都不返回与echo $OSTYPE 相同的字符串。 (macOS 12.0.1,Zsh 5.8)
猜你喜欢
  • 1970-01-01
  • 2011-12-05
  • 2018-06-24
  • 2015-05-28
  • 2016-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多