Warum liefert rm -rf keinen Fehler?

1029
Stu

ubuntu 9.10 Wenn Sie rm eingeben, erhalten Sie einen fehlenden Operandenfehler. Dasselbe gilt für rm -r, aber bei rm -f wird kein Fehler ausgegeben. -f soll "erzwingen" sein, nicht "Fehler beseitigen"

2

3 Antworten auf die Frage

10
Florian Diesch

SUSv3 sagt:

-f Keine Bestätigung anfordern. Schreiben Sie keine Diagnosemeldungen oder ändern Sie den Exit-Status bei nicht vorhandenen Operanden. Alle früheren Vorkommen der Option -i werden ignoriert.

8
MDMarra

Auf der Unix-Manpage

-f, --force
ignoriert nicht vorhandene Dateien und fordert Sie niemals auf

Das Ignorieren nicht vorhandener Dateien bedeutet, dass keine Fehlermeldung angezeigt wird, wenn keine zu entfernenden Dateien vorhanden sind. Dies geschieht, wenn Sie rm -f ohne Angabe von Dateien verwenden. Soweit ich weiß, ist dies das erwartete Verhalten. Es ignoriert nicht alle Fehler, aber -f erfordert nicht, dass in der Datei ein Operand aufgeführt wird, sodass kein Fehler ausgegeben werden kann.

scheint mir etwas faul, Die Manpage sagt: rm [OPTION] ... DATEI ... wie in DATEI ist nicht optional. Stu vor 13 Jahren 2
@nixomose sofern nicht -f angegeben ist :). Der Punkt ist, dass Sie mehrere Dateien in der Befehlszeile angeben können. Wenn einer von ihnen fehlt und Sie -f nicht bestanden haben, wird eine Fehlermeldung angezeigt. Wenn Sie -f übergeben, werden alle Fehler in Bezug auf Dateien unterdrückt. Felix vor 13 Jahren 3
Richtig, genau das passiert, aber die Manpage lässt Sie nicht glauben. -f, --force ignoriert nicht vorhandene Dateien und gibt keine Eingabeaufforderungen aus. Sagen Sie nichts über das Ignorieren von Fehlern. Stu vor 13 Jahren 1
+1 für Nixomose, "aber -f erfordert nicht, dass die Datei einen Operanden aufführt", ist einfach nicht sinnvoll. Die Man-Page, auf die Sie einen Link setzen, behauptet, dass dies nicht der Fall ist, und tatsächlich wird dies ausdrücklich als erforderlich deklariert. Dies ist einfach ein Fall, in dem die Manpage und das Programmverhalten nicht übereinstimmen. Die Manpage muss aktualisiert werden, um den Effekt des 'f'-Schalters genauer wiederzugeben Dan McGrath vor 13 Jahren 2
1
Raphaël Hertzog

Um zu verstehen, warum der Dateiparameter wirklich optional ist, müssen Sie berücksichtigen, dass in vielen Skripts die Liste der zu entfernenden Dateien in einer Variablen gespeichert wird. Mit -f können Sie sich nicht darum kümmern, ob die Liste leer ist oder nicht. Sie können einfach tun:

rm -f $FILES 

Insead der umständlicheren:

-z "$FILES" || rm $FILES 

Daher ist es logisch, dass eine Option namens "Nicht vorhandene Dateien ignorieren" nicht fehlschlägt, wenn in der Befehlszeile keine Datei angegeben ist.

Das mag wahr sein und Sinn machen, und Programmierer neigen dazu, das zu tun, was persönlich bequemer ist als das, was dem Muster folgt, aber dies ist 'rm'. Es ist älter als mein Vater und die Manpage ist seit wie vielen Jahrzehnten falsch. Stu vor 13 Jahren 1