為什麼「grep -v」或「tail -f」停止我的程式的輸出?

為什麼「grep -v」或「tail -f」停止我的程式的輸出?

我有一個歐洲卡車模擬 2 伺服器,透過以下命令調用:

LD_LIBRARY_PATH='$ORIGIN/../../linux64' eurotrucks2_server

當伺服器運行時,有時我會在控制台中看到這些行(我想隱藏它們):

src/steamnetworkingsockets/clientlib/steamnetworkingsockets_sdr_common.h (564) : m_pServer->m_nReplyTimeoutsSinceLastRecv == 0

但是每當我追加 a | grep -v "Timeout"or時| grep -v "steamnetworkingsockets",伺服器輸出就會在這一行被截斷:

Setting breakpad minidump AppID = 227300

我還嘗試了--line-bufferedgrep 選項,但沒有運氣,並且刪除 grep 並使用| tail -f具有相同的結果。

這是整個輸出:https://paste.debian.net/hidden/290d8573/

謝謝

答案1

唯一|能抓住的是標準輸出(標準輸出)流;這些訊息將會發送至標準誤(標準誤差)流。使用grep隱藏 stderr 訊息是XY問題

Y問題的解決方案

grep同時對於兩者,您需要將 stderr 流轉送到 stdout 2>&1,例如,

eurotrucks2_server 2>&1 | grep -v "Timeout"

X問題的解決方案

  • 丟棄 stderr 輸出2>/dev/null,例如,

    eurotrucks2_server 2>/dev/null
    
  • 將 stderr 輸出轉送(追加)到日誌文件2>>/path/to/error.log,例如,

    eurotrucks2_server 2>>/var/log/eurotrucks2_server_error.log
    

相關內容