Subject: Re: bug#60989: [PATCH] rm: fail on duplicate input if force not enabled

From: Pádraig Brady <[email-masked]>
Date: Sun, 22 Jan 2023 21:36:49 +0000

On 22/01/2023 18:18, Philip Rowlands wrote:
> On Sat, 21 Jan 2023, at 13:05, Łukasz Sroka wrote:
>> When the input files contain duplicates, then the rm fails. Because
>>      duplicates occur most often when the * is used and the shell unwraps it.
>>      There is a very common scenario when a user accidentally enters space
>>      after a filename, or enters space instead of forward slash.
> 
> To fail on duplicate FILE args, this bash function would do (lightly tested, doesn't attempt getopt processing):
> 
> function safe_rm {
>    local -A seen
>    local file
>    for file in "$@"; do
>      if [[ -v ${seen[$file]} ]]; then
>        echo "error: duplicate name '$file'" 1>&2
>        return 1
>      fi
>      seen[$file]=1
>    done
> 
>    # no dupes seen
>    command rm "$@"
> }
> 
> and could be used today, without waiting for the next coreutils release.

That's informative, thanks.

> As an aside, I could be reading it wrong but the coreutils manual suggests the file arguments are optional
>     rm [option]… [file]…

Right with the -f option rm will not fail if no arguments are specified
(in the presence of nullglob etc.), which is POSIX compliant.

cheers,
Pádraig