2

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

3 ответа3

10

SUSv3 говорит:

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

8

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

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

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

1

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

rm -f $FILES

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

-z "$FILES" || rm $FILES

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .