Windows 根据bash中的操作系统运行不同命令的最佳方法
在bash脚本中,有一种“正式”的方式来运行基于操作系统版本的不同命令。我的意思是,在某种程度上,你可以在顶部设置一次,然后在其他地方以同样的方式调用它。 我曾尝试使用别名,但这似乎是一个废话,在某些系统上不起作用(一个是使用WinBash的Windows7) 例如,这就是我所尝试的:Windows 根据bash中的操作系统运行不同命令的最佳方法,windows,macos,bash,scripting,Windows,Macos,Bash,Scripting,在bash脚本中,有一种“正式”的方式来运行基于操作系统版本的不同命令。我的意思是,在某种程度上,你可以在顶部设置一次,然后在其他地方以同样的方式调用它。 我曾尝试使用别名,但这似乎是一个废话,在某些系统上不起作用(一个是使用WinBash的Windows7) 例如,这就是我所尝试的: if [ "$(uname)" = "Darwin" ]; then alias p4cli=./bin/p4 else alias p4cli=C:\bin\p4.exe fi p4cli l
if [ "$(uname)" = "Darwin" ]; then
alias p4cli=./bin/p4
else
alias p4cli=C:\bin\p4.exe
fi
p4cli login
如果我使用shopt-s expand\u别名,它可以在Mac上运行,但win bash没有shopt。
我假设有比别名更好的方法来实现这一点?使用变量,而不是别名
if [ "$(uname)" = "Darwin" ]; then
p4cli=(./bin/p4)
else
p4cli=('C:\bin\p4.exe')
fi
"${p4cli[@]}" login
我们制作变量数组,以便在以后需要时将参数添加到命令中。将命令保存在变量中如何
if [ "$(uname)" = "Darwin" ]; then
p4cli='./bin/p4'
else
p4cli='C:\bin\p4.exe'
fi
$p4cli login
使调用p4cli
的进程负责将正确的目录添加到其PATH
变量中。然后只需调用p4cli登录
,而无需担心其确切位置
大概,您可以从特定于机器(或至少是特定于操作系统)的.bash_profile
,它可以硬编码正确的目录。要确定bash中的底层操作系统,最好依赖于env变量OSTYPE
。bash手册页说明变量OSTYPE存储操作系统的名称:
OSTYPE自动设置为描述操作类型的字符串
在其上执行bash的系统。默认值取决于系统
对于这个特定的示例,在运行脚本之前正确设置路径就足够了。
if [[ "$OSTYPE" == "darwin"* ]]; then
p4cli="./bin/p4"
else
p4cli="C:\bin\p4.exe"
fi
"$p4cli" login