Subject: bug#18449: "cat x >> x" error even when x is empty

From: Pádraig Brady <[email-masked]>
Date: Thu, 11 Sep 2014 14:20:06 +0100

On 09/11/2014 02:00 PM, Vincent Lefevre wrote:
> With coreutils 8.23 under Debian/unstable:
> 
> ypig% : > x
> ypig% cat x >> x
> cat: x: input file is output file
> ypig% POSIXLY_CORRECT=1 cat x >> x
> cat: x: input file is output file
> 
> while there's no reason to return an error in this case: the file
> should just remain empty. Using the same file for input and output
> isn't disallowed by POSIX, AFAIK.
> 
> This may not seem really useful here, but this can potentially break
> scripts with things like:
> 
>   cat "$foo" >> "$bar"
> 
> where "$foo" may be the same file as "$bar" only if it is empty.

I'm struggling to see that use case TBH.

> BTW, when x isn't empty, I wonder whether an error is correct if
> POSIXLY_CORRECT is set. The result will typically depend on the
> implementation and possibly be non-deterministic, but POSIX doesn't
> seem to allow an error (except FS errors, such as disk full).

This is just a protection against non deterministic usage.
I.E. if there is data in the file then it'll probably run
until the file system is exhausted.  This is what happens
on FreeBSD BTW, though I see that Solaris has the same
protections as GNU.

I wouldn't be on for removing this protection which
has existed from the initial GNU implementation.

cheers,
Pádraig.