不向 xargs 传送任何内容

不向 xargs 传送任何内容

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

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

答案1

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

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

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

答案2

关于为什么您应该阅读手册页的一课......

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

相关内容