Почему rm -rf не выдает ошибку?

941
Stu

Ubuntu 9.10 Если вы наберете rm, вы получите ошибку пропущенного операнда, то же самое с rm -r, но rm -f не выдает ошибки. -f должен быть «силой», а не «рассеивать ошибки»

2

3 ответа на вопрос

10
Florian Diesch

SUSv3 говорит:

-f Не запрашивать подтверждение. Не пишите диагностические сообщения и не изменяйте состояние выхода в случае несуществующих операндов. Любые предыдущие вхождения опции -i должны игнорироваться.

8
MDMarra

Из справочной страницы Unix

-f, --force
игнорировать несуществующие файлы, никогда не запрашивать

игнорирование несуществующих файлов означает, что не будет ошибки, если нет файлов для удаления, что происходит, когда вы используете rm -f без указания файла (ов). Это ожидаемое поведение, насколько я знаю. Он не игнорирует все ошибки, но -f не требует, чтобы файл указывался в качестве операнда, поэтому нет ошибки для выброса.

мне кажется немного подозрительным, страница руководства гласит: rm [OPTION] ... FILE ... как в FILE не является обязательным. Stu 14 лет назад 2
@nixomose, если не указан -f :). Дело в том, что вы можете указать несколько файлов в командной строке. Если какой-либо из них отсутствует, и вы не передали -f, вы получите ошибку. Если вы передадите -f, все ошибки, связанные с файлами, будут подавлены. Felix 14 лет назад 3
верно, это то, что происходит, но это не то, что страница руководства заставляет вас верить. -f, --force игнорировать несуществующие файлы, никогда не предлагать ничего не говорить о игнорировании ошибок. Stu 14 лет назад 1
+1 для nixomose: «но -f не требует, чтобы файл был указан как операнд» - это просто бессмысленно. На странице руководства, на которую вы ссылаетесь, претензий нет, а фактическая явно объявляет ее необходимой. Это просто случай, когда страница руководства и поведение программы не совпадают. Страница man должна быть обновлена, чтобы более точно отражать эффект переключателя 'f' Dan McGrath 14 лет назад 2
1
Raphaël Hertzog

Чтобы понять, почему параметр file действительно необязательный, вы должны учитывать, что во многих сценариях список удаляемых файлов хранится в переменной, а использование -f позволяет вам не заботиться о том, пуст ли список или нет. Вы можете просто сделать:

rm -f $FILES 

из более громоздких

-z "$FILES" || rm $FILES 

Поэтому логично, что параметр «игнорировать несуществующие файлы» не завершается ошибкой, если в командной строке не указан файл.

Это может быть правдой и иметь смысл, и программисты стремятся делать то, что лично удобнее, чем то, что следует шаблону, но это «гм». Он старше моего отца, и страница руководства была неправильной на протяжении многих десятилетий? Stu 14 лет назад 1

Похожие вопросы