如果标准输入为空,如何打破管道?
如果标准输入为空,我想打破整个管道。我尝试结合 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
这里所有命令ifne和command1都是同时启动的。只有ifne通过 接收到输入/dev/stdin,它才会启动各自的commandx