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

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

$ rm *

Я получил:

rm: remove regular file `xx'? n

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

$ rm -- *

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

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

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

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

1 ответ1

2

В идеальном мире, я думаю, да, мы должны систематически использовать -- . Но все мы научились использовать команду 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 ./* в качестве безопасного обходного пути.

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