没有管道到 xargs

Ric*_*ard 14 bash xargs

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

我怎样才能避免这种情况?

小智 13

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

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

然后,您可以选择使用基于的操作系统检测$OSTYPE来编写跨平台脚本。更好的是,尝试检测xargs自身的行为。运行它,-r如果失败(状态代码> 0),请在没有-r.