我有一个脚本,在某些情况下可能在标准输出上没有任何内容。在脚本的末尾,我使用 xargs 将我所拥有的行传递给另一个命令。我的问题是,当标准输出上没有任何内容时,我收到典型的“Usage:program arg1 arg2”错误消息。
我怎样才能避免这种情况?
答案1
您需要一个-r
或--no-run-if-empty
选项。
请记住,这种特殊行为很难跨平台。 BSD 版本默认xargs
运行。 -r
GNU 版本需要它。 FreeBSD 版本xargs
忽略-r
与 GNU 兼容的标志。 Mac OS X 版本甚至不接受该标志并抛出错误illegal option
。
然后,您可以选择使用基于操作系统的检测来$OSTYPE
编写跨平台脚本。更好的是,尝试检测自身的行为xargs
。使用 运行它-r
,如果失败(状态代码 > 0),则不使用 运行它-r
。
答案2
关于为什么您应该阅读手册页的一课......
-r
或标志--no-run-if-empty
是我的朋友。