如何在跨平台命令中使用xargs

时间:2015-03-22 16:22:49

标签: bash cross-platform

我想在bash中生成一个具有以下结构的单行:

generate-url.sh | xargs `cross-platform-open`

其中cross-platform-open应该是一行,根据平台运行xdg-openopen

我能够使用行

运行此跨平台命令
if [ `uname` == "Linux" ] ; then `xdg-open` ; else `open` ; fi

它适用于我的目的。但是,当我想把它扔进上面一行时,bash开始抱怨(显然因为内部重音符(`)字符正在破坏外部的执行块)。我尝试使用eval但没有运气。有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

您需要评估条件以生成可执行文件的名称,因为xargs将调用可执行文件:

opener() {
  if [ $(uname) == Linux ]; then echo xdg-open; else echo open; fi;
}
generate-url.sh | xargs $(opener)

上面,我使用$(...)而不是长期过时的反引号语法。虽然仍然支持反引号,但应该避免使用反引号;一方面,他们没有嵌套,所以你不能使用它们直接插入定义opener,就像$(...)一样:

generate-url.sh | xargs $(if [ $(uname) == Linux ]; then echo xdg-open; else echo open; fi;)