Bei der Verwendung rm
mit beiden -i
und -f
Optionen, wird die erste ignoriert. Dies ist im POSIX- Standard dokumentiert :
-f
Do not prompt for confirmation. Do not write diagnostic messages or modify
the exit status in the case of nonexistent operands. Any previous
occurrences of the -i option shall be ignored.
-i
Prompt for confirmation as described previously. Any previous occurrences
of the -f option shall be ignored.
und auch auf der GNU info
Seite:
‘-f’
‘--force’
Ignore nonexistent files and missing operands, and never prompt the user.
Ignore any previous --interactive (-i) option.
‘-i’
Prompt whether to remove each file. If the response is not affirmative, the
file is skipped. Ignore any previous --force (-f) option.
Mal sehen, was unter der Haube passiert:
rm
verarbeitet seine Option mit getopt(3)
, speziell getopt_long
. Diese Funktion verarbeitet die Optionsargumente in der Befehlszeile ( **argv
) in der angegebenen Reihenfolge:
Wenn getopt () wiederholt aufgerufen wird, werden nacheinander alle Optionszeichen der einzelnen Optionselemente zurückgegeben.
Diese Funktion wird normalerweise in einer Schleife aufgerufen, bis alle Optionen verarbeitet wurden. Aus Sicht dieser Funktionen werden die Optionen der Reihe nach abgearbeitet. Was jedoch tatsächlich passiert, ist anwendungsabhängig, da die Anwendungslogik auswählen kann, ob widersprüchliche Optionen erkannt, überschrieben oder ein Fehler angezeigt werden soll. Für den Fall rm
und die i
und f
-Optionen überschreiben sie sich perfekt. Von rm.c
:
234 case 'f':
235 x.interactive = RMI_NEVER;
236 x.ignore_missing_files = true;
237 prompt_once = false;
238 break;
239
240 case 'i':
241 x.interactive = RMI_ALWAYS;
242 x.ignore_missing_files = false;
243 prompt_once = false;
244 break;
Beide Optionen setzen die gleichen Variablen und der Status dieser Variablen ist die letzte Option in der Befehlszeile. Die Auswirkung entspricht dem POSIX-Standard und der rm
Dokumentation.