我有一个 Euro Truck Simulator 2 的服务器,由以下命令调用:
LD_LIBRARY_PATH='$ORIGIN/../../linux64' eurotrucks2_server
当服务器运行时,有时我会在控制台中看到这些行(我想隐藏它们):
src/steamnetworkingsockets/clientlib/steamnetworkingsockets_sdr_common.h (564) : m_pServer->m_nReplyTimeoutsSinceLastRecv == 0
但每当我附加| grep -v "Timeout"
或时| grep -v "steamnetworkingsockets"
,服务器输出就会在这一行被截断:
Setting breakpad minidump AppID = 227300
我也尝试了--line-buffered
grep 选项,但没有成功,并且删除 grep 并使用也| tail -f
得到了相同的结果。
以下是整个输出:https://paste.debian.net/hidden/290d8573/
谢谢
答案1
唯一|
的收获是标准输出(stdout)流;这些消息将发送到标准误差(stderr)流。使用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