Una pregunta sobre el uso recomendado de rm y--
Digamos que he creado dos archivos -i
y 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 -rf
o similares.
Entonces mi pregunta es:
¿Deberíamos utilizar sistemáticamente comandos
--
inrm
antes 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 rm
problema 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 rm
comando 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 $thatfile
no puede hacer rm
que se malinterpreten sus argumentos.
En su ejemplo específico ( rm *
), probablemente lo usaría normalmente rm ./*
como una solución alternativa segura.