Domanda

Ho un semplice script che viene utilizzato per avviare un altro programma. Questo altro programma può talvolta produrre un SIGSEGV , che interrompe il mio output. Ho quindi aggiunto un paio di righe che dovrebbero reindirizzare temporaneamente stderr su / dev / null in modo tale che SIGSEGV venga ignorato. Quella che segue è una bozza del mio codice:

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

Il problema è che l'ultima riga non fa quello che voglio. La prima riga ovviamente funziona e reindirizza stderr . L'ultima riga dovrebbe riportare stderr al punto in cui era prima (cosa che ho supposto sia la stessa di stdout ).

Qualsiasi aiuto sarebbe valutato!

È stato utile?

Soluzione

Un'altra opzione è:

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

O anche

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

In questo modo lo script preserva la separazione di stdout e stderr per lo script (cioè gli script stdout e stderr possono essere reindirizzati separatamente.

Altri suggerimenti

Perché non reindirizzarlo solo per l'esecuzione progname?

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

O forse

{
   progname > ./tmp/run.txt && run_status='OK'
} 2>/dev/null
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top