[TUHS] History of #! interpretation in Unix

Warner Losh imp at bsdimp.com
Tue Jan 18 02:35:34 AEST 2011

On 01/16/2011 14:37, John Cowan wrote:
> Sven Mascheck scripsit:
>> With /bin/sh you actually meant any shell calling "itself"?
>> Otherwise I'm afraid, I have some difficulties following you.
> I mean that whereas (t)csh uses /bin/sh to run scripts with no
> shebangs, the Posix-compatible shells execute scripts with no
> shebangs directly.  And this is Bad.

The alternatives are worse.

On a sysIII system, you had the situation where scripts would be 
executed by whatever your shell.  So if you put a script on the system, 
you had to make sure everybody used csh and write it in csh, or you had 
to make sure nobody did and write it in /bin/sh.

The current situation says that 'you must opt-in' to a different shell, 
which leads to more predictable behavior.

Later, #! processing moved into the kernel so that interpreters would 
execute things directly.

To cope with that confusing mess, the perl env hack was born so that the 
perl scripts could execute anywhere, independent of the shell driving it.


More information about the TUHS mailing list