[TUHS] History of #! interpretation in Unix
mascheck at in-ulm.de
Mon Jan 17 05:19:42 AEST 2011
John Cowan wrote:
> Sven Mascheck scripsit:
> > As you mention "shebangs began .. as csh-only hack":
> > I still wonder if one may call the BSD csh-hack as origin,
> > because #! might have been developed independently at Bell Labs.
> No, that would be too much of a coincidence to choose exactly the
> same characters. There has to be a single point of origin, from
> which it spread by stimulus diffusion (you hear there are telescopes,
> you know they use lenses, you build your own telescope).
This doesn't sound obligatory to me (I know it's academic).
DMR might have known the csh-hack (and if a comment character is
implemented anywhere, here csh, then it's obvious to use it for #!)
> > I thought sh-like shells in general try to interprete scripts themselves
> > upon an ENOEXEC. Do you know certain shells which actually call "/bin/sh"?
> Yes, seemingly bash does that too. Bogus.
How'd you get the impression? I can't verify this.
bash-1.05:execute_cmd.c executed the commands itself, in a subshell,
" [ errno == ENOEXEC ]
/* This file is executable.
If it begins with #!, then help out people with losing
operating systems. Otherwise, check to see if it is a binary
file by seeing if the first line (or upto 30 characters) are in
the ASCII set. Execute the contents as shell commands. */ "
and this hasn't been changed (except length or return status)
until the current release.
Perhaps you had another shell in mind? I believe a shell should
try to execute commands itself instead of calling any other shell.
(That's the only way how executing on in POSIX shell is possible, BTW,
because neither #! nor paths are standardized).
More information about the TUHS