temporary redirection under a Bourne-shell using "exec"

temporary redirection under a Bourne-shell using "exec"

Post by Peter Jeffe 512.823.40 » Sun, 14 Oct 1990 09:33:24



->exec 3<&1 >&-        # open File Descriptor 3 (stdout), and close stdout
->echo invisible     # shell stdout is closed, local stdout is FD 3
->exec 1<&3 3>&-       # reopen stdout (and close FD 3)
->echo hello
-
-I would rather change this as follows:
-
->exec 3>&1 >/dev/null
-
-[...] I would not CLOSE stdout (...>&-...) but
-REDIRECT it to /dev/null in the first exec.
-
-Maybe many programs don't care for error returns from their output
-operations, but *some* may do (and IMHO these are the ones written
-by the more careful programmers). Such a program may assume that a
-severe error occured if sending something to stdout returns an error
-and terminate in an unexpected way.

And perhaps a more important reason to leave stdout open (but redirected)
is that if a program does an open() it will probably pick up file descriptor
1 if stdout has been closed.  Then, anything it puts on stdout will get
munged in with what is going to the opened file.  Very messy...

-------------------------------------------------------------------------------
  disclaimer: given the subjective nature of reality, the opinions contained
  herein can have no relationship to any other person's conception of reality,
  and cannot therefore constitute grounds for a lawsuit, right?

Peter Jeffe   ...uunet!cs.utexas.edu!ibmchs!auschs!sandino.austin.ibm.com!jeffe

 
 
 

temporary redirection under a Bourne-shell using "exec"

Post by Chris Gonnerm » Wed, 17 Oct 1990 06:18:09




> ->exec 3<&1 >&-   # open File Descriptor 3 (stdout), and close stdout
> ->echo invisible        # shell stdout is closed, local stdout is FD 3
> ->exec 1<&3 3>&-  # reopen stdout (and close FD 3)
> ->echo hello
> -I would rather change this as follows:
> ->exec 3>&1 >/dev/null

Some shells don't like you using fd 3... in particular, ash and some
implementations of csh (sorry, forget which ones) use fd 3 for reading
the shell script.  Redirecting it causes strange behavior.

I have an application where I do much the same thing, but I
(arbitrarily) chose to use fd 9 instead of 3 (after my program
repeatedly broke).

--
 +----------------------------------------------------------------------------+
 | Chris Gonnerman (Mad Programmer At Large)   csusac.ecs.csus.edu!tree!jcg   |

 +----------  DISCLAIMER: These opinions are mine... MINE, I say!  -----------+