Question

J'ai un script simple qui est utilisé pour démarrer un autre programme. Cet autre programme peut parfois générer un SIGSEGV , ce qui perturbe ma sortie. J'ai donc ajouté quelques lignes censées rediriger temporairement stderr vers / dev / null de sorte que le SIGSEGV soit ignoré. Voici un brouillon de mon code:

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

Le problème est que la dernière ligne ne fait pas ce que je veux. La première ligne fonctionne évidemment et redirige le stderr . La dernière ligne est supposée renvoyer stderr à son emplacement antérieur (ce qui, je l’ai supposé, est identique à stdout ).

Toute aide serait appréciée!

Était-ce utile?

La solution

Une autre option est:

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

Ou même

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

Ainsi, le script préserve la séparation entre stdout et stderr (les scripts stdout et stderr peuvent être redirigés séparément.

Autres conseils

Pourquoi ne pas simplement le rediriger uniquement pour l'exécution nom_programme?

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

Ou éventuellement

{
   progname > ./tmp/run.txt && run_status='OK'
} 2>/dev/null
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top