Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 根据bash中的操作系统运行不同命令的最佳方法_Windows_Macos_Bash_Scripting - Fatal编程技术网

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

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

在bash脚本中,有一种“正式”的方式来运行基于操作系统版本的不同命令。我的意思是,在某种程度上,你可以在顶部设置一次,然后在其他地方以同样的方式调用它。 我曾尝试使用别名,但这似乎是一个废话,在某些系统上不起作用(一个是使用WinBash的Windows7)

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

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