por que "grep -v" ou "tail -f" interrompe a saída do meu programa?

por que "grep -v" ou "tail -f" interrompe a saída do meu programa?

Tenho um servidor para Euro Truck Simulator 2 que é chamado pelo seguinte comando:

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

Quando o servidor está em execução, às vezes recebo estas linhas no console (e gostaria de ocultá-las):

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

Mas sempre que acrescento um | grep -v "Timeout"or | grep -v "steamnetworkingsockets", a saída do servidor é truncada precisamente nesta linha:

Setting breakpad minidump AppID = 227300

Também tentei a --line-bufferedopção grep sem sorte e também remover grep e usar | tail -fteve o mesmo resultado.

Aqui está o resultado completo:https://paste.debian.net/hidden/290d8573/

Obrigado

Responder1

O |único pega osaída padrão(stdout) fluxo; essas mensagens vão para oerro padrão(stderr) fluxo. Usar greppara ocultar as mensagens stderr é umaProblema XY.

Solução para o problema Y

Para grepambos ao mesmo tempo, você precisa encaminhar o fluxo stderr para stdout com 2>&1, por exemplo,

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

Soluções para o problema X

  • Descarte a saída stderr com 2>/dev/null, por exemplo,

    eurotrucks2_server 2>/dev/null
    
  • Encaminhe (acrescente) a saída stderr para um arquivo de log com 2>>/path/to/error.log, por exemplo,

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

informação relacionada