Nas*_*rka 2 shell pipe io-redirection
我想将整个管道的 STDOUT 和 STDERR 重定向到/dev/null.
考虑到这是我的命令:
sudo lsof -i:22000 -t | xargs kill -9
Run Code Online (Sandbox Code Playgroud)
我知道这是错误的做法:
sudo lsof -i:22000 -t | xargs kill -9 >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
我们如何实现这一点,因为简单地添加>/dev/null 2>&1不会对管道产生任何影响,因为它将被解释为xargs kill -9?
Kus*_*nda 10
管道的输出
sudo lsof -i:22000 -t | xargs kill -9 >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
没有完全重定向到,/dev/null因为最后的重定向只影响xargs命令,正如您所指出的,将标准错误流连sudo接到终端。然而,从技术上讲,重定向不是xargs. 的标准输入xargs来自sudo管道左侧的命令。
您需要将管道作为一个整体重定向:
{ your pipeline; } >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
IE,
{ sudo lsof -i:22000 -t | xargs kill -9; } >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
或者,您显然可以单独重定向每个单独的部分。
根据这是一个永远不会再使用的“一次性”一次性命令,还是将进入系统关键维护脚本的一行代码,您可能想要制作管道的左侧以这样的方式,它在正常操作环境下根本不会产生诊断消息(因此不需要隐藏其错误消息)。或者,您可能希望通过 systemd 或某些等效的服务框架来管理在端口 22000 上运行的服务。
切线相关: