在bash中根据操作系统运行不同命令的最佳方法

时间:2012-12-11 19:33:22

标签: windows macos bash scripting

在bash脚本中,有一种“官方”方式可以根据OS版本运行不同的命令。我的意思是你可以基本上在顶部设置一次,然后在其他地方以相同的方式调用它。 我试图使用别名,但这似乎是一个废话,并没有在某些系统上真正起作用(一个是使用win-bash的Windows 7)。

例如,这就是我尝试过的:

if [ "$(uname)" = "Darwin" ]; then
    alias p4cli=./bin/p4
else
    alias p4cli=C:\bin\p4.exe
fi

p4cli login

如果我使用shopt -s expand_aliases但是win-bash没有shopt,它适用于Mac。 我假设有一个比别名更好的方法吗?

4 个答案:

答案 0 :(得分:2)

要确定bash中的底层操作系统,最好依赖于env变量OSTYPE。 bash手册页说变量OSTYPE存储操作系统的名称:

  

OSTYPE自动设置为描述操作的字符串   正在执行bash的系统。默认值取决于系统。

if [[ "$OSTYPE" == "darwin"* ]]; then
   p4cli="./bin/p4"
else
   p4cli="C:\bin\p4.exe"
fi

"$p4cli" login

答案 1 :(得分:1)

使调用p4cli的进程负责将正确的目录添加到其PATH变量中。然后,您只需拨打p4cli login即可,无需担心其确切位置。

据推测,您可以从特定于机器的(或至少是特定于操作系统的).bash_profile执行此操作,这可以对正确的目录进行硬编码。

答案 2 :(得分:0)

使用变量,而不是别名。

if [ "$(uname)" = "Darwin" ]; then
    p4cli=(./bin/p4)
else
    p4cli=('C:\bin\p4.exe')
fi

"${p4cli[@]}" login

我们创建变量数组,以便以后可以在需要时将参数添加到命令中。

答案 3 :(得分:0)

如何在变量中保存命令?

if [ "$(uname)" = "Darwin" ]; then
    p4cli='./bin/p4'
else
    p4cli='C:\bin\p4.exe'
fi

$p4cli login