Shell

如何將管道的輸出重定向到 >/dev/null

  • July 10, 2021

我想將整個管道的 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 上執行的服務。

切線相關:

引用自:https://unix.stackexchange.com/questions/657738