¿Por qué el manual de rm dice que podemos ejecutarlo sin ningún argumento, cuando esto no es cierto?

¿Por qué el manual de rm dice que podemos ejecutarlo sin ningún argumento, cuando esto no es cierto?

Podemos ver que la sinopsis del rmcomando es:

rm [OPTION]... [FILE]...

¿No significa que podemos usar sólo rmel comando sin ninguna opción o argumento?
Cuando ejecuto el comando rmpor 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

rmSe 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 -fsin operandos de archivo no es un error:

$ rm -f
$ echo "$?"
0

... pero simplemente no hace mucho.

El estándar dice que para la -fopción, la rmutilidad 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. -iSe ignorará cualquier aparición anterior de la opción.

Esto confirma que debe ser posible ejecutar rm -fsin ningún operando de nombre de ruta y que esto no es algo que haga rmsalir 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 -faú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 rmmanual 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 rmmostraría las tres variantes:

rm[opciones...]archivo...
rm --help
rm --version

información relacionada