ARG_MAX| Shells | whatshell | portability | permissions | UUOC | ancient | - | ../Various | HOME
"$@"| echo/printf | set -e | test | tty defs | tty chars |
)| IFS | using siginfo | nanosleep | line charset | locale
Usually, you won't notice that, because it's not possible to use or redirect file descriptors higher than 9 (single digit) in the shell.
However, if the file descriptor was opened in advance and another process, being started through a Bourne shell script, expects this file descriptor still to be open, then it will fail, because the interposed shell closed it.
This can be demonstrated with a program listing open file descriptors
or with utilities like
$ exec 19>&1 # Redirect file descriptor 19 to where stdout is pointing to. # Execute this command in a modern bourne compatible shell, # because the traditional bourne shell doesn't allow it. $ ./list-fd # Confirm the redirection with a program. FD 0: O_RDWR FD 1: O_RDWR FD 2: O_RDWR FD 19: O_RDWR $ cat script.sh # This is a shell script calling that program #!/bin/sh # ... with the #! mechanism pointing to your Bourne shell ./list-fd $ ./script.sh # Start it through the #! mechanism: File descriptor 19 was closed by the interpreter, FD 0: O_RDWR FD 1: O_RDWR FD 2: O_RDWR $ sh ./script.sh # or directly call a traditional bourne shell as interpreter: ...dito, FD 0: O_RDWR FD 1: O_RDWR FD 2: O_RDWR $ bash ./script.sh # in other shells (bash, ksh, etc.) file descriptor 19 is still open: FD 0: O_RDWR FD 1: O_RDWR FD 2: O_RDWR FD 19: O_RDWR
A few variants changed this:
It was fixed on SCO Unix 32v42 (and its successors Open Desktop 3 and OpenServer 5).
On HP-UX it was not fixed, but slightly improved: fd 59 is hardcoded instead.