我想在bash中生成一个具有以下结构的单行:
generate-url.sh | xargs `cross-platform-open`
其中cross-platform-open
应该是一行,根据平台运行xdg-open
或open
。
我能够使用行
运行此跨平台命令if [ `uname` == "Linux" ] ; then `xdg-open` ; else `open` ; fi
它适用于我的目的。但是,当我想把它扔进上面一行时,bash开始抱怨(显然因为内部重音符(`)字符正在破坏外部的执行块)。我尝试使用eval
但没有运气。有人可以帮我解决这个问题吗?
答案 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;)