Shell
如何將管道的輸出重定向到 >/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
?
管道的輸出
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
或者,您顯然可以單獨重定向每個單獨的部分。
根據這是您永遠不會再次使用的“一次性”一次性命令,還是將進入系統關鍵維護腳本的程式碼行,您可能需要製作管道的左側以這樣一種方式,它在正常操作情況下根本不會產生診斷消息(因此不需要隱藏其錯誤消息)。或者,您可能希望通過 systemd 或一些等效的服務框架來管理在埠 22000 上執行的服務。
切線相關: