GNU Info

Info Node: (autoconf.info)File Descriptors

(autoconf.info)File Descriptors


Next: File System Conventions Prev: Here-Documents Up: Portable Shell
Enter node , (file) or (file)node

File Descriptors
================

   Some file descriptors shall not be used, since some systems,
admittedly arcane, use them for special purpose:

     3 --- some systems may open it to `/dev/tty'.
     4 --- used on the Kubota Titan.

   Don't redirect several times the same file descriptor, as you are
doomed to failure under Ultrix.

     ULTRIX V4.4 (Rev. 69) System #31: Thu Aug 10 19:42:23 GMT 1995
     UWS V4.4 (Rev. 11)
     $ eval 'echo matter >fullness' >void
     illegal io
     $ eval '(echo matter >fullness)' >void
     illegal io
     $ (eval '(echo matter >fullness)') >void
     Ambiguous output redirect.

In each case the expected result is of course `fullness' containing
`matter' and `void' being empty.

   Don't try to redirect the standard error of a command substitution:
it must be done _inside_ the command substitution: when running `: `cd
/zorglub` 2>/dev/null' expect the error message to escape, while `: `cd
/zorglub 2>/dev/null`' works properly.

   It is worth noting that Zsh (but not Ash nor Bash) makes it possible
in assignments though: `foo=`cd /zorglub` 2>/dev/null'.

   Most shells, if not all (including Bash, Zsh, Ash), output traces on
stderr, even for sub-shells.  This might result in undesired content if
you meant to capture the standard-error output of the inner command:

     $ ash -x -c '(eval "echo foo >&2") 2>stderr'
     $ cat stderr
     + eval echo foo >&2
     + echo foo
     foo
     $ bash -x -c '(eval "echo foo >&2") 2>stderr'
     $ cat stderr
     + eval 'echo foo >&2'
     ++ echo foo
     foo
     $ zsh -x -c '(eval "echo foo >&2") 2>stderr'
     # Traces on startup files deleted here.
     $ cat stderr
     +zsh:1> eval echo foo >&2
     +zsh:1> echo foo
     foo

You'll appreciate the various levels of detail...

   One workaround is to grep out uninteresting lines, hoping not to
remove good ones...

   Don't try to move/delete open files, such as in `exec >foo; mv foo
bar', see Note: Limitations of Builtins, `mv' for more details.


automatically generated by info2www version 1.2.2.9