2016-11-07 15:57:25 +0000, Stephane Chazelas:
> 2016-11-07 15:40:15 +0000, Geoff Clare:
> [...]
> > > Same problem with "mv" (which I think would work just
> > > as well (with LC_ALL=C mv -i < /dev/null 2> /dev/null))
> >
> > No, mv -i doesn't work just as well - it has a race condition.
> > If a file is created in between the existence check and the
> > rename() call, mv will remove the file.
>
> How so? "mv -i" with /dev/null as stdin ("no" answer to prompt)
> is not supposed to remove anything.
[...]
However, at least with GNU mv, the exit code if the file exists
will be 0. So it can't be used here.
BTW, there's an issue in the spec for "mv":
> EXIT STATUS
>
> The following exit values shall be returned:
>
> 0
> All input files were moved successfully.
> >0
> An error occurred.
In
mv -i a b
if the user says "no", "a" will not be moved successfully, and
there will not have been any error.
Should probably be something like:
0
All input files (approved by the user with -i) were
moved successfully.
Also, should failure to write the prompt or read the answer be
considered an error?
Using:
mv -i a b 2>&- <&-
or
mv -i a b < /dev/null 2>&-
seem to work with GNU or Solaris10 mv (in that it returns with
an error when a prompt fails to be issued) but not with
FreeBSD's
--
Stephane