# not honored?

Guy Harris guy at auspex.auspex.com
Fri Mar 30 06:13:20 AEST 1990


>But I had thought that "#" as the first byte of a file meant "this is
>a C shell script" (unless, of course, the first two bytes are "#!").

That's true on some systems.  It is not true on others, and SunOS since
SunOS 3.0 has been one of the "others".

>It appears that the Bourne shell does not respect this rule.

That is correct.

>Should it?

No.

The original V7 Bourne shell didn't really have comments; instead, it
had a no-op command ":", that permitted you to give it arguments (as
long as they were syntactically correct and didn't have unpleasant
side-effects!) that took the form of descriptive text.

The C shell (either *ab initio*, or after some point in its life), *did*
have comments, marked with "#".

The original systems on which the C shell appeared didn't support "#!",
so the ": means Bourne shell, # means C shell" crock was invented as a
way of having Bourne shell users able to run C shell scripts and *vice
versa*.

Then "#!" appeared, which obliged the Bourne shell to be able to cope
with "#" as the first character in a script.  Berkeley added "#" as a
real comment character in the Bourne shell, but didn't change the
aforementioned crock.

AT&T *also* added "#" as a comment character in the Bourne shell; since
they didn't much use the C shell, they didn't add said crock.

SunOS 3.0 picked up the S5R2 Bourne shell, since it's a big improvement
over the V7-vintage one in BSD.  Given that "#!" had been around for a
while, it was perhaps concluded (I wasn't involved at the time, so I
don't know for sure) that said crock had outlived its usefulness.

>(On systems where the C shell exists and uses this convention.)

S5R4 is such a system, and all *hell* would break loose were the Bourne
shell to adopt that convention, since "#" has been a comment character
for quite a while, and plenty of scripts would break horribly were that
convention to be adopted.  Fortunately, S5R4 has "#!", so that
convention isn't needed, either....

The moral of the story is that the best thing to do at this point is
probably to blow off the systems that don't have "#!", and always use
"#!" to indicate the interpreter to be used to handle a script.  An even
better thing to do might be to think twice before deciding to write a
script in the C shell; the Bourne shell is generally accepted as
handling scripts better....



More information about the Comp.unix.questions mailing list