如何将管道的输出重定向到>/dev/null

如何将管道的输出重定向到>/dev/null

我想将整个管道的 STDOUT 和 STDERR 重定向到/dev/null.

考虑到这是我的命令:

sudo lsof -i:22000 -t | xargs kill -9

我知道这是错误的做法:

sudo lsof -i:22000 -t | xargs kill -9 >/dev/null 2>&1

>/dev/null 2>&1由于简单的添加不会对管道产生任何影响,因为它将被解释为 STDIN 的一部分,我们如何才能实现这一点xargs kill -9

答案1

管道的输出

sudo lsof -i:22000 -t | xargs kill -9 >/dev/null 2>&1

未完全重定向到,/dev/null因为最后的重定向仅影响命令,正如您所指出的,留下连接到终端xargs的标准错误流。sudo然而,从技术上讲,重定向并不是 的“标准输入的一部分” xargs。的标准输入xargs来自sudo管道左侧的命令。

您需要将整个管道重定向:

{ your pipeline; } >/dev/null 2>&1

IE,

{ sudo lsof -i:22000 -t | xargs kill -9; } >/dev/null 2>&1

或者,您显然可以单独重定向每个单独的部分。

根据这是一个您永远不会再使用的“once-liner”一次性命令,还是将进入系统关键维护脚本的一行代码,您可能需要制作管道的左侧以这种方式,它在正常操作情况下根本不产生诊断消息(因此不需要隐藏其错误消息)。或者,您可能希望通过 systemd 或某些等效的服务框架来管理在端口 22000 上运行的服务。

切向相关:

相关内容