Reindirizzamento temporaneo di stderr in uno script bash
-
22-07-2019 - |
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!
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