如果标准输入为空,如何打破管道?

如果标准输入为空,我想打破整个管道。我尝试结合 xargs -r 和 tee,这意味着如果 stdin 为空则不打印和写入,但它失败了

...| upstream commands | xargs -r tee output.txt | downstream commands | ...

任何反馈表示赞赏。

回答

您实际上无法有条件地终止 bash 管道。管道中的所有命令同时启动。但是,有一个工具可以帮助您创建条件管道。在moreutils您可以找到ifne当且仅当输入/dev/stdin不为空时执行命令的工具。所以你可以这样写:

$ command1 | ifne command2 | ifne command3 | ifne command4

这里所有命令ifnecommand1都是同时启动的。只有ifne通过 接收到输入/dev/stdin,它才会启动各自的commandx


以上是如果标准输入为空,如何打破管道?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>