
我有一個歐洲卡車模擬 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-buffered
grep 選項,但沒有運氣,並且刪除 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