¿Deberíamos utilizar sistemáticamente `--` al ejecutar `rm`?

¿Deberíamos utilizar sistemáticamente `--` al ejecutar `rm`?

Una pregunta sobre el uso recomendado de rm y--

Digamos que he creado dos archivos -iy xx. Si trato de eliminarlos con

$ rm *

Yo obtengo:

rm: remove regular file `xx'? n

Y, como se explica en¿Cómo elimino un archivo en Linux cuyo nombre parece SÓLO un guión, como en "-"?y otros, la forma de solucionar esto es con:

$ rm -- *

Obviamente los problemas podrían ser mucho peores con nombres llamados -rfo similares.

Entonces mi pregunta es:

¿Deberíamos utilizar sistemáticamente comandos --in rmantes que cualquier cosa que sea ampliable, para evitar sorpresas o exploits desagradables?

La razón por la que pregunto esto es que hace un tiempo aprendí este rmproblema y luego lo olvidé, hasta hace poco que un compañero de equipo lo trajo nuevamente. Sin embargo nunca he visto recomendaciones en ese sentido y siendo tan arriesgado, me pregunto ¿deberíamos tenerlo más presente? ¿Debería el uso de --algún tipo de secuencia de comandos y patrón de consola cada vez que se use rm(y probablemente otros comandos)?

Respuesta1

En un mundo perfecto, supongo que sí, deberíamos utilizar sistemáticamente --. Pero todos aprendimos a usar el rmcomando sin escribir sistemáticamente --, y escribirlo cuesta tres pulsaciones de teclas adicionales, por lo que no veo que eso suceda. Además, la --convención para terminar opciones no siempre ha existido (razón por la cual muchas personas no la aprendieron cuando aprendieron a usar rm).

Dicho esto, cuando utilices rm(y otros comandos) en scripts de shell, definitivamente siempre debes programar de forma defensiva. Así por ejemplo:

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

No es seguro y debería serlo rm -- "$1". Sin embargo,

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

es seguro, porque el contenido de $thatfileno puede hacer rmque se malinterpreten sus argumentos.

En su ejemplo específico ( rm *), probablemente lo usaría normalmente rm ./*como una solución alternativa segura.

información relacionada