在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。
我假设有一个比别名更好的方法吗?
答案 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