如何将 xargs 与跨平台命令一起使用

How to use xargs with cross platform commands

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

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

其中 cross-platform-open 应该是 运行s xdg-openopen 的单行代码,具体取决于平台。

我能够 运行 运行 这个跨平台命令通过使用行

if [ `uname` == "Linux" ] ; then `xdg-open` ; else `open` ; fi

它对我的目的来说效果很好。但是,当我想将其放入上面的行时,bash 开始抱怨(显然是因为内部重音符号 (`) 字符正在破坏外部字符的执行块)。我尝试改用 eval 但没有成功。有人可以帮我解决这个问题吗?

您需要评估条件以生成可执行文件的名称,因为 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;)