Pregunta

Tengo un script simple que se usa para iniciar otro programa. Este otro programa a veces puede producir un SIGSEGV , que interrumpe mi salida. Por lo tanto, he agregado un par de líneas que se supone que redirigen temporalmente el stderr a / dev / null de modo que se ignore el SIGSEGV . El siguiente es un borrador de mi código:

exec 2> /dev/null
progname >& ./tmp/run.txt && run_status='OK'
exec 2>1

El problema es que la última línea no hace lo que quiero. La primera línea obviamente funciona y redirige el stderr . Se supone que la última línea devuelve el stderr a donde estaba antes (que solo supuse que es lo mismo que stdout ).

¡Cualquier ayuda sería solicitada!

¿Fue útil?

Solución

Otra opción es:

exec 3> /dev/stderr 2> /dev/null
progname >& ./tmp/run.txt && run_status='OK'
exec 2>&3

O incluso

exec 3>&2 2> /dev/null
progname >& ./tmp/run.txt && run_status='OK'
exec 2>&3

De esa forma, el script conserva la separación de stdout y stderr para el script (es decir, los scripts stdout y stderr se pueden redirigir por separado.

Otros consejos

¿Por qué no simplemente redirigirlo solo para el nombre del programa ejecutado?

   progname > ./tmp/run.txt 2>/dev/null && run_status='OK'

O posiblemente

{
   progname > ./tmp/run.txt && run_status='OK'
} 2>/dev/null
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top