Ich weiß, das rm -f file1
wird gewaltsam entfernt, file1
ohne mich dazu aufzufordern.
Ich weiß auch, dass rm -i file1
mich das zuerst auffordert, bevor es entfernt wirdfile1
Wenn Sie jetzt ausführen rm -if file1
, wird dies auch mit Gewalt entfernt, file1
ohne mich dazu aufzufordern.
Wenn Sie jedoch ausführen rm -fi file1
, werde ich vor dem Entfernen dazu aufgefordert file1
.
Stimmt es, dass beim Kombinieren von Befehlsoptionen die letzte Priorität hat? wie rm -if
, dann -f
wird Vorrang haben, aber -fi
dann -i
wird der Vorrang haben.
Dem ls
Befehl zum Beispiel ist es egal, ob Sie ls -latR
oder sagten ls -Rtal
.
Also denke ich, dass es nur wichtig ist, wenn Sie widersprüchliche Befehlsoptionen haben rm -if
, ist das richtig?
command-line
rm
command
options
alkabary
quelle
quelle
Antworten:
Bei der Verwendung
rm
mit beiden-i
und-f
Optionen, wird die erste ignoriert. Dies ist im POSIX- Standard dokumentiert :und auch auf der GNU
info
Seite:Mal sehen, was unter der Haube passiert:
rm
verarbeitet seine Option mitgetopt(3)
, speziellgetopt_long
. Diese Funktion verarbeitet die Optionsargumente in der Befehlszeile (**argv
) in der angegebenen Reihenfolge: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 diei
undf
-Optionen überschreiben sie sich perfekt. Vonrm.c
: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.quelle
rm
) vor. Ich denke, es ist selten, dass ein Befehl jemals die erste Einstellung einer Option annimmt und Argumente ignoriert, die eine bereits festgelegte Option ändern würden.Ja,
rm
das ist gültig. Ob die letzte Option die vorherigen überschreibt, hängt jedoch vom jeweiligen Programm ab. Aus ´info rm´Als genereller Hinweis: Ist in der
info
Regel detaillierter alsman
, was selbst in der Regel detaillierter als die--help
Option ist.quelle
Es gibt keine "Priorität" für Flags, jedes Programm behandelt sie so, wie es es wünscht. Die meisten bemühen sich, alle Flags zu sammeln und auf Konflikte zu prüfen. Für Standardwerkzeuge (wie die referenzierten
rm(1)
) schreiben die relevanten Standards möglicherweise etwas vor (Ihre spezielle Version kann jedoch bei der Interpretation von Eckfällen des Standards schlampig sein / nicht speziell getestet werden für Sie).Für den Programmierer, der das Programm schreibt, ist es am einfachsten, die Argumente (Flags und andere) in strikter Reihenfolge von links nach rechts zu betrachten und möglicherweise auszusteigen, wenn er einen Haken trifft. Wenn Sie eine Bibliothek verwenden, um mit Flags umzugehen (zum Beispiel
getopt(3)
, es gibt mehrere Versionen, die im Umlauf sind), tut der Programmierer vermutlich das, was am einfachsten / natürlichsten ist. Programmierer sind Menschen, Menschen sind faul (oder denken zumindest nicht gern über die kombinatorische Explosion nach).quelle