emptying a file and keeping its ownership

Phil Hughes fyl at ssc.UUCP
Tue Jan 8 09:19:23 AEST 1991


In article <97 at gdx.UUCP>, jay at gdx.UUCP (Jay A. Snyder) writes:
> >
> >I find that in my csh, the following works:
> >	% : > file
> >That initial colon does the trick. What mechanism is operating here?

> The ':' is a comment character for old versions of sh (dating from
> V7), in fact V7 bourne shell doesn't accept '#' for comments.  Most
> modern verions of sh do recongnize the ':'.

> If you are running Xenix, the ':' is also used to tell a non bourne
> shell that a script is intended for bourne shell (equiv to a BSD file
> with #!/bin/sh as the first line).

Well, close.  The : command is a null command.  It returns 0 exit status.
Sort of like true and, in fact, I expect it predates true.  But, it
isn't a comment.  This is why the proposed command works.  There is a
command but the only thing it does is return a 0 exit status.

Comments were added later and # is the comment character.  Prior to
the existence of #, people would use : to introduce a comment, the
most common one being the program name on the first line of a script.
When C shell was born, there needed to be a way to tell it whether it was
to interpret a script itself or pass it off to the Bourne shell.  As many
Bourne shell scripts already existed a method was needed that would not
break existing scripts.  So the # comment was born and it is required
to be the first character of a C shell script.  If it is not (as would
be the case will all existing Bourne shell scripts) it would be
passed off to the Bourne shell.

The reason a line with just
    > file
works in Bourne shell is the shell performs all the I/O redirection
and then looks for the command.  There is none so it just terminates and
is happy.  C shell apparently cares.

-- 
Phil Hughes, SSC, Inc. P.O. Box 55549, Seattle, WA 98155  (206)FOR-UNIX
     uunet!pilchuck!ssc!fyl or attmail!ssc!fyl            (206)527-3385



More information about the Comp.unix.xenix.sco mailing list