没有向xargs管道


14

我有一个脚本,在某些情况下,stdout上可能没有任何内容。在脚本的最后,我使用xargs将必须的行传递给另一个命令。我的问题是,当stdout上没有任何内容时,我收到典型的“用法:程序arg1 arg2”错误消息。

如何避免这种情况?


8
在答案中移动“编辑”并接受您自己的答案。这样,您的发现将对其他人有用。meta.unix.stackexchange.com/questions/809/...
andcoz

1
当时积分不足。现在就做。
理查德

Answers:


13

您需要一个-r--no-run-if-empty选项。

请记住,这种特殊行为很难跨平台。默认xargs运行的BSD版本-r。GNU版本需要它。FreeBSD版本的xargsignores -r标志与GNU兼容。Mac OS X版本甚至不接受该标志并引发错误illegal option

然后,您可以选择基于OS检测$OSTYPE来编写跨平台脚本。更好的是,尝试检测xargs自身的行为。使用来运行它,-r如果失败(状态码> 0),则不使用来运行它-r


3

为什么要阅读手册页的课程...

-r--no-run-if-empty标志是我的朋友。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.