如何将 xargs 与跨平台命令一起使用
How to use xargs with cross platform commands
我想在 bash 中生成一个具有以下结构的单行代码:
generate-url.sh | xargs `cross-platform-open`
其中 cross-platform-open
应该是 运行s xdg-open
或 open
的单行代码,具体取决于平台。
我能够 运行 运行 这个跨平台命令通过使用行
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;)
我想在 bash 中生成一个具有以下结构的单行代码:
generate-url.sh | xargs `cross-platform-open`
其中 cross-platform-open
应该是 运行s xdg-open
或 open
的单行代码,具体取决于平台。
我能够 运行 运行 这个跨平台命令通过使用行
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;)