
Podemos ver que la sinopsis del rm
comando es:
rm [OPTION]... [FILE]...
¿No significa que podemos usar sólo rm
el comando sin ninguna opción o argumento?
Cuando ejecuto el comando rm
por sí solo, la terminal muestra el siguiente error:
rm: missing operand Try 'rm --help' for more information.
¿Alguien puede decirme por qué es así?
Respuesta1
rm
Se especifica la sinopsis estándar de la utilidad.en el estándar POSIX1 y 2 como
rm [-iRr] file...
rm -f [-iRr] [file...]
En su primera forma, requiere al menos un operando de archivo, pero en su segunda forma no.
Hacer rm -f
sin operandos de archivo no es un error:
$ rm -f
$ echo "$?"
0
... pero simplemente no hace mucho.
El estándar dice que para la -f
opción, la rm
utilidad debería...
No solicite confirmación. No escriba mensajes de diagnóstico ni modifique el estado de salida en el caso de que no haya operandos de archivo o en el caso de operandos que no existan.
-i
Se ignorará cualquier aparición anterior de la opción.
Esto confirma que debe ser posible ejecutar rm -f
sin ningún operando de nombre de ruta y que esto no es algo que haga rm
salir con un mensaje de diagnóstico ni un estado de salida distinto de cero.
Este hecho es muy útil en un script que intenta eliminar una cantidad de archivos como
rm -f -- "$@"
donde "$@"
hay una lista de nombres de rutas que pueden estar vacías o no, o que pueden contener nombres de rutas que no existen.
( rm -f
aún generará un mensaje de diagnóstico y saldrá con un estado de salida distinto de cero si hayproblemas de permisosevitando que se elimine un archivo con nombre).
Sin embargo, ejecutar la utilidad sin opción ni operandos de nombre de ruta es un error:
$ rm
usage: rm [-dfiPRrv] file ...
$ echo "$?"
1
Lo mismo se aplica a GNU rm
(lo anterior muestra OpenBSD rm
) y otras implementaciones de la misma utilidad, pero el mensaje de diagnóstico exacto y el estado de salida distinto de cero pueden ser diferentes (en Solaris el valor es 2 y en macOS es 64). Por ejemplo).
En conclusión, el rm
manual de GNU puede ser un poco impreciso ya que es cierto que con alguna opción ( -f
, que es una opción opcional), el operando nombre de ruta es opcional.
1 desde la edición de 2016, tras resolución deeste error, verla edición anteriorpara referencia.
2 POSIX es el estándar que define qué es un sistema Unix y cómo se comporta. Esta norma es publicada porEl grupo abierto. Véase también la pregunta "¿Qué es exactamente POSIX?".
Respuesta2
Técnicamente, la sinopsis es correcta, pero resulta confusa. Hay casos en los que no se necesita ningún nombre de archivo:
rm --help
rm --version
(cuando se usa GNU rm
). Todos los demás casos requieren un nombre de archivo.
Otras versiones derm
muestran el archivo como no opcional,p.ejenla página de manual de OpenBSD.
Una sinopsis más precisa de GNU rm
mostraría las tres variantes:
rm
[opciones...]archivo...
rm --help
rm --version