3

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

例如,这是我尝试过的:

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

p4cli login

如果我使用它可以在 Mac 上运行,shopt -s expand_aliases但 win-bash 没有 shopt。我假设有比别名更好的方法来做到这一点?

4

4 回答 4

2

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

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

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

"$p4cli" login
于 2012-12-11T19:45:30.637 回答
1

使用变量,而不是别名。

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

"${p4cli[@]}" login

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

于 2012-12-11T19:42:04.063 回答
1

使调用的进程p4cli负责将正确的目录添加到其PATH变量中。然后你只需要打电话p4cli login而不用担心它的确切位置。

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

于 2012-12-11T19:45:14.387 回答
0

将命令保存在变量中怎么样?

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

$p4cli login
于 2012-12-11T19:43:48.907 回答