Devemos usar sistematicamente `--` ao executar `rm`?

Devemos usar sistematicamente `--` ao executar `rm`?

Uma pergunta sobre o uso recomendado de rm e--

Digamos que eu criei dois arquivos -ie xx. Se eu tentar removê-los com

$ rm *

Eu recebo:

rm: remove regular file `xx'? n

E, como explicado emComo faço para remover um arquivo no Linux cujo nome parece ser APENAS um hífen, como em "-"e outros, a forma de resolver isso é com:

$ rm -- *

Obviamente os problemas poderiam ser muito piores com nomes chamados -rfou similares.

Então minha pergunta é:

Devemos usar sistematicamente comandos --in rmantes de qualquer coisa que seja expansível, para evitar surpresas desagradáveis ​​ou explorações?

A razão pela qual pergunto isso é que há um tempo atrás eu aprendi essa rmpegadinha e depois esqueci, até recentemente que um colega de equipe a trouxe novamente. Porém nunca vi nenhuma recomendação nesse sentido e sendo tão arriscado, me pergunto se deveríamos ter isso mais presente? O uso de --algum tipo de script e padrão de console deve ser usado sempre que for usado rm(e provavelmente outros comandos)?

Responder1

Em um mundo perfeito, acho que sim, deveríamos usar sistematicamente --. Mas todos nós aprendemos a usar o rmcomando sem digitar sistematicamente --, e digitá-lo custa três toques extras no teclado, então não vejo isso acontecendo. Além disso, a --convenção para encerrar opções nem sempre existiu (é por isso que muitas pessoas não aprenderam sobre isso quando aprenderam a usar rm).

Dito isto, ao usar rm(e outros comandos) em scripts shell, você definitivamente deve sempre programar defensivamente. Então, por exemplo:

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

não é seguro e deveria ser rm -- "$1". No entanto,

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

é seguro, porque o conteúdo de $thatfilenão pode causar rmmá interpretação de seus argumentos.

No seu exemplo específico ( rm *), eu provavelmente usaria rm ./*como uma solução alternativa segura.

informação relacionada