writing zero bytes in bash

Russell Coker russell at coker.com.au
Sat Feb 26 10:39:42 UTC 2005


On Saturday 26 February 2005 19:48, Mihai Maties <mihai at xcyb.org> wrote:
> On Saturday 26 February 2005 09:32, Russell Coker wrote:
> > It opens the file with O_CREAT (so if you were to do `echo -n "" >
> > /tmp/flag` to create a flag file then it would work as expected), but
> > never calls the write(2) system call.
> >
> > To unset the fscreate or exec context you have to call write(fd, X, 0)
> > (the value of X doesn't seem to matter as the kernel code doesn't
> > dereference it).
>
> As a sidenote, dd behaves the same. dd if=/dev/null of=something does not
> call write(2) because it doesn't need to write anything. Since no records
> were read it assumes that no records must be written. Again, the output
> file would be created because of the open("something", O_CREAT) call.

However dd bs=0 is an error, so dd refuses to operate in a situation where the 
operater specifically requests a zero write.

> > So it seems reasonable to me to consider this to be a bug in bash where
> > it's optimisation of shell code results in the action requested by the
> > user not being performed correctly.
>
> It's quite logical since if you do not have something to write, to not try
> to write it.

That's one approach to the issue.  The other is that if the administrator 
requests an operation then it should be completed.  In the majority of 
situations where a user requests a strange operation Unix complies and does 
as requested.  The expectation of a Unix system is that what you request will 
be done even if it is bad for you, so why not do what is requested just 
because it seems redundant?

Someone who does "echo -n > foo" to create file foo could have just as easily 
done "touch foo".

> > I expect that the bash developers may disagree with this assessment so I
> > would like some more input on the lists before I file a bug report.
>
> If I were a bash developer I would disagree with you :) You would ask me to
> make a workaround in bash to solve an issue that has its roots somewhere
> else...

Actually I am not asking for a feature to be added, but for a feature to be 
removed.  There is special-case code in bash if(size >0) write() and I am 
merely suggesting that the if statement be removed.

-- 
http://www.coker.com.au/selinux/   My NSA Security Enhanced Linux packages
http://www.coker.com.au/bonnie++/  Bonnie++ hard drive benchmark
http://www.coker.com.au/postal/    Postal SMTP/POP benchmark
http://www.coker.com.au/~russell/  My home page




More information about the fedora-devel-list mailing list