Question

I have a simple script which is used to start another program. This other program may sometimes yield a SIGSEGV, which disrupts my output. I have therefore added a couple of lines which is supposed to temporarily redirect the stderr to /dev/null such that the SIGSEGV is ignored. The following is a draft of my code:

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

The problem is that the last line does not do what I want. The first line obviously works, and redirects the stderr. The last line is supposed to return the stderr back to where it was before (which I have only supposed is the same as stdout).

Any help would be appriciated!

Was it helpful?

Solution

Another option is:

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

Or even

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

That way the script preserves the separation of stdout and stderr for the script (ie. the scripts stdout and stderr can be redirected separately.

OTHER TIPS

Why not just redirect it for the progname run only?

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

Or possibly

{
   progname > ./tmp/run.txt && run_status='OK'
} 2>/dev/null
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top