Следует ли нам систематически использовать `--` при выполнении `rm`?

Следует ли нам систематически использовать `--` при выполнении `rm`?

Вопрос о рекомендуемом использовании rm и--

Допустим, я создал два файла -iи xx. Если я попытаюсь удалить их с помощью

$ rm *

Я получил:

rm: remove regular file `xx'? n

И, как объяснено вКак удалить файл в Linux, имя которого выглядит так, будто состоит ТОЛЬКО из дефиса, например, «-»и другие, способ решения этой проблемы:

$ rm -- *

Очевидно, что проблемы могли бы быть гораздо серьезнее, -rfесли бы использовались похожие имена.

Итак, мой вопрос:

Должны ли мы систематически использовать команды --in rmперед всем, что можно расширить, чтобы избежать неприятных сюрпризов или уязвимостей?

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

решение1

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

При этом, при использовании rm(и других команд) в скриптах оболочки, вы определенно всегда должны программировать с защитой. Например:

rm "$1"    # Remove the file named in the first command line argument

небезопасно и должно быть rm -- "$1". Однако,

rm "/var/spool/foo/$thatfile"

безопасен, поскольку содержание $thatfileне может привести rmк неправильному толкованию его аргументов.

В вашем конкретном примере ( rm *) я бы, вероятно, обычно использовал rm ./*как безопасный обходной путь.

Связанный контент