ARG_MAX
| Shells
| whatshell
| portability
| permissions
| UUOC
| ancient
| -
| ../Various
| HOME
"$@"
| echo/printf
| set -e
| test
| tty defs
| tty chars
| $()
vs )
| IFS
| using siginfo
| nanosleep
| line charset
| locale
The following was released under the licenses of BSD and Caldera.
Here are extracts from the 3BSD (03/'80) variant of the Bourne shell, usr/src/cmd/sh/service.c.
See also the corresponding code in csh in 2BSD (05/'79).
LOCAL STRING execs(ap,t) STRING ap; REG STRING t[]; { [...] execve(p, &t[0] ,xecenv); SWITCH errno IN case ENOEXEC: [...] /* band aid to get csh... 2/26/79 */ { char c; if (!isatty(input)) { read(input, &c, 1); if (c == '#') gocsh(t, xecenv); lseek(input, (long) 0, 0); } } [...] } gocsh(t, xecenv) register char **t, **xecenv; { char **newt[1000]; register char **p; register int i; for (i = 0; t[i]; i++) newt[i+1] = t[i]; newt[i+1] = 0; newt[0] = "/bin/csh"; execve("/bin/csh", newt, xecenv); }