Eric Blake wrote: >>> cp [-Pfip] source_file target_file >> Thanks for the clarification. So POSIX mandates all of -fin are allowed, >> the last taking precedence. I presume it also means warnings should not be >> printed. > > No, POSIX only mandates -fi. -n is an extension, so we can make it > behave however we'd like (although consistent behavior goes a long way). > >> In any case I think the `mv` descriptions should we reworded to something >> like: >> >> -f rename a file even if the destination is present and not writable >> (overrides any previous -i or -n option). > > Not quite. -f and -i do not override each other. Per POSIX, they > affect independent code paths, such that: > > cp > cp -f > cp -i > cp -f -i (also spelled cp -i -f) > > have four different behaviors.
OK I had missed the asymmetry between the -f options of mv and cp. The descriptions in Kamil's patch look correct so. For my own reference this is how I now see the overwrite characteristics of cp & mv: cp : default overwrite method = truncate only (file must be writable) -f overwrite method = truncate falling back to unlink+create (redundant if the -n option is used) --remove-destination overwrite method = unlink+create (redundant if the -n option is used) -i prompt before trying to overwrite dest (overrides any preceeding -n option) -n never overwrite (overrides any preceeding -i option) mv : prompt to overwrite if dest not writable -f never prompt before overwriting (overrides any preceeding -i or -n options) -i always prompt before overwriting (overrides any preceeding -f or -n options) -n never overwrite (overrides any preceeding -f or -i options) p.s. According to the FreeBSD manpages referenced in this thread, cp -f in FreeBSD doesn't conform to POSIX, and instead means as I originally thought: "try best to overwrite _and don't prompt_." I.E. it overrides any preceeding -i or -n options. cheers, Pádraig. _______________________________________________ Bug-coreutils mailing list Bug-coreutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-coreutils