
Wir können sehen, dass die Zusammenfassung des rm
Befehls wie folgt lautet:
rm [OPTION]... [FILE]...
Bedeutet das nicht, dass wir nur rm
den Befehl ohne Option oder Argument verwenden können?
Wenn ich den Befehl rm
allein ausführe, zeigt das Terminal den folgenden Fehler an:
rm: missing operand Try 'rm --help' for more information.
Kann mir jemand sagen, warum das so ist?
Antwort1
Die Standardzusammenfassung des rm
Dienstprogramms ist angegebenim POSIX-Standard1&2 als
rm [-iRr] file...
rm -f [-iRr] [file...]
In der ersten Form ist mindestens ein Dateioperand erforderlich, in der zweiten Form jedoch nicht.
Das Ausführen rm -f
ohne Dateioperanden ist kein Fehler:
$ rm -f
$ echo "$?"
0
... aber es bewirkt einfach nicht viel.
Der Standard besagt, dass das Dienstprogramm für diese -f
Option ...rm
Fordern Sie nicht zur Bestätigung auf. Schreiben Sie keine Diagnosemeldungen und ändern Sie den Beendigungsstatus nicht, wenn keine Dateioperanden vorhanden sind oder wenn Operanden nicht vorhanden sind. Alle vorherigen Vorkommen der
-i
Option werden ignoriert.
Dies bestätigt, dass die Ausführung rm -f
ohne Pfadnamenoperanden möglich sein muss und dass dies weder zu einer rm
Beendigung mit einer Diagnosemeldung noch zu einem Beendigungsstatus ungleich Null führt.
Diese Tatsache ist sehr nützlich in einem Skript, das versucht, eine Anzahl von Dateien zu löschen,
rm -f -- "$@"
wobei es "$@"
sich um eine Liste von Pfadnamen handelt, die leer sein können, aber nicht müssen, oder die Pfadnamen enthalten können, die nicht existieren.
( rm -f
wird immer noch eine Diagnosemeldung generieren und mit einem Exit-Status ungleich Null beendet, wennBerechtigungsproblemeVerhindert das Löschen einer benannten Datei.)
Das Ausführen des Dienstprogramms ohne Option oder Pfadnamenoperanden führt jedoch zu einem Fehler:
$ rm
usage: rm [-dfiPRrv] file ...
$ echo "$?"
1
Dasselbe gilt für GNU rm
(oben wird OpenBSD gezeigt rm
) und andere Implementierungen desselben Dienstprogramms, aber die genaue Diagnosemeldung und der von Null verschiedene Exit-Status können unterschiedlich sein (unter Solaris ist der Wert beispielsweise 2 und unter macOS 64).
Zusammenfassend lässt sich sagen, dass das GNU- rm
Handbuch möglicherweise etwas ungenau ist, da bei einigen Optionen ( -f
, die eine optionale Option sind) der Pfadname-Operand optional ist.
1 seit der Ausgabe 2016, nach Beschluss desdieser Fehler, sehendie vorherige Ausgabeals Referenz.
2 POSIX ist der Standard, der definiert, was ein Unix-System ist und wie es sich verhält. Dieser Standard wird veröffentlicht vonDie offene Gruppe. Siehe auch die Frage "Was genau ist POSIX?".
Antwort2
Technisch gesehen ist die Zusammenfassung korrekt, aber sie ist verwirrend. Es gibt Fälle, in denen kein Dateiname erforderlich ist:
rm --help
rm --version
(bei Verwendung von GNU rm
). In allen anderen Fällen ist ein Dateiname erforderlich.
Andere Versionen rm
zeigen die Datei als nicht optional an,z.BIndie OpenBSD-Manpage.
Eine genauere Zusammenfassung für GNU rm
würde die drei Varianten zeigen:
rm
[Optionen...]Datei...
rm --help
rm --version