Safe POSIX job-controlled bash for ISC 2.2

Saul Lubkin lubkin at cs.rochester.edu
Tue Jun 11 04:27:33 AEST 1991


>In article <42651 at unlisys.in-berlin.de> rot at unlisys.in-berlin.de (Robert Rothe) writes:
>
>>the other is a redirection-bug ! if you use '> /dev/device' it
>>will always complain: cannot clobber existing file - when noclobber
>>is set. if noclobber is not set - bash will try to unlink the file
>>and recreates it. that is a strange behavior.
>
I don't think this is right.  I've tried commands like
echo foo > /dev/tty
echo foo > `tty`
cat /etc/profile > /dev/tty
cat /etc/profile > /dev/tty01
etc., etc., with bash1.08p1, as further patched with the diffs that I
posted, and with the fixed "getcwd.c".  All of these commands worked
correctly -- whether or nor "noclobber" was set.

In answer to Robert's posting, Chet writes:

>As much as I hate to say it, this sounds like an OS bug.  With noclobber
>set, bash checks the target of output redirection and complains only if the
>file is a `regular' file (that is, S_ISREG (statbuf.st_mode) returns
>non-zero).  Devices in /dev are supposed to be either character-special or
>block-special.
>
>When noclobber is not set, bash tries `open' with a flags argument of
>O_TRUNC | O_WRONLY | O_CREAT.  It never tries to unlink the file.
>
>As a test, see what test -c /dev/device or test -b /dev/device return,
>using $?.  One of them should give $? == 0.  Then see what test -f /dev/device
>returns.  It should always be 1.  Here's what I get on a Sun-4 running
>SunOS 4.1:
>
>odin$ tty
>/dev/ttyp5
>odin$ test -c $(tty)
>odin$ echo $?
>0
>odin$ test -b $(tty)
>odin$ echo $?
>1
>odin$ test -f $(tty)
>odin$ echo $?
>1
>
>My terminal, /dev/ttyp5, is therefore a character special device.

I tried it, and get exactly the same results under ISC 2.2 with bash1.08p1,
and the patches that I posted previously.

I don't understand why Robert got different behavior.

On a different tack:

I've downloaded gcc1.40, and ran the fixincludes script on it.  It did a
good enough job on the ISC 2.2 headers, that I was able to compile bash1.08p1
with the ISC 2.2 diffs, with "gcc -posix" rather than "gcc -posix -traditional".
The resulting "bash" is a bit smaller, and seems to work the same.  (Some
minor fixes are needed, for ANSI C prototype checking, here and there.)

		Yours sincerely,

		Saul Lubkin



More information about the Comp.unix.sysv386 mailing list