¿Por qué "grep -v" o "tail -f" detienen la salida de mi programa?

¿Por qué "grep -v" o "tail -f" detienen la salida de mi programa?

Tengo un servidor para Euro Truck Simulator 2 al que se llama con el siguiente comando:

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

Cuando el servidor se está ejecutando, a veces aparecen estas líneas en la consola (y me gustaría ocultarlas):

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

Pero cada vez que agrego un | grep -v "Timeout"o | grep -v "steamnetworkingsockets", la salida del servidor se trunca precisamente en esta línea:

Setting breakpad minidump AppID = 227300

También probé la --line-bufferedopción grep sin suerte y también eliminar grep y usarlo | tail -ftiene el mismo resultado.

Aquí está el resultado completo:https://paste.debian.net/hidden/290d8573/

Gracias

Respuesta1

El |único atrapa elsalida estándar(salida estándar) corriente; Estos mensajes van alError estándar(stderr) corriente. Usar greppara ocultar los mensajes stderr es unaproblema xy.

Solución al problema Y

Para grepambos al mismo tiempo, debe reenviar la transmisión stderr a stdout con 2>&1, por ejemplo,

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

Soluciones al problema X

  • Descartar la salida estándar con 2>/dev/null, por ejemplo,

    eurotrucks2_server 2>/dev/null
    
  • Reenviar (añadir) la salida stderr a un archivo de registro con 2>>/path/to/error.log, por ejemplo,

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

información relacionada