Le synopsis standard pour le rm
L'utilitaire est spécifié dans la norme POSIX comme
rm [-iRr] file...
rm -f [-iRr] [file...]
Dans sa première forme, il nécessite au moins un opérande de fichier, mais pas dans sa seconde forme.
Faire rm -f
sans opérandes de fichier n'est pas une erreur :
$ rm -f
$ echo "$?"
0
... mais ça ne fait pas grand-chose.
La norme dit que pour le -f
option, le rm
l'utilitaire devrait...
Ne demande pas de confirmation. N'écrivez pas de messages de diagnostic et ne modifiez pas l'état de sortie en cas d'absence d'opérandes de fichier ou d'opérandes qui n'existent pas. Toutes les occurrences précédentes du
-i
l'option doit être ignorée.
Cela confirme qu'il doit être possible d'exécuter rm -f
sans aucun opérande de nom de chemin et que ce n'est pas quelque chose qui fait rm
sortie avec un message de diagnostic ni un état de sortie différent de zéro.
Ce fait est très utile dans un script qui essaie de supprimer un certain nombre de fichiers comme
rm -f -- "[email protected]"
où "[email protected]"
est une liste de chemins qui peuvent être vides ou non, ou qui peuvent contenir des chemins qui n'existent pas.
(rm -f
générera toujours un message de diagnostic et quittera avec un état de sortie différent de zéro s'il y a des problèmes d'autorisation empêcher la suppression d'un fichier nommé.)
L'exécution de l'utilitaire sans opérandes d'option ni de nom de chemin est cependant une erreur :
$ rm
usage: rm [-dfiPRrv] file ...
$ echo "$?"
1
Il en va de même pour GNU rm
(ce qui précède montre OpenBSD rm
) et d'autres implémentations du même utilitaire, mais le message de diagnostic exact et l'état de sortie différent de zéro peuvent être différents (sur Solaris, la valeur est 2, et sur macOS, c'est 64, par exemple).
En conclusion, la GNU rm
le manuel est peut-être juste un peu imprécis car c'est vrai qu'avec certaines option (-f
, qui est une option facultative), l'opérande du nom de chemin est facultatif.
depuis l'édition 2016, après résolution de ce bug, voir l'édition précédente pour référence.
POSIX est la norme qui définit ce qu'est un système Unix et comment il se comporte. Cette norme est publiée par The Open Group. Voir aussi la question "Qu'est-ce que POSIX exactement ?".
Techniquement, le synopsis est correct, mais il prête à confusion. Il y a des cas où aucun nom de fichier n'est nécessaire :
rm --help
rm --version
(lors de l'utilisation de GNU rm
). Tous les autres cas nécessitent un nom de fichier.
Autres versions de rm
afficher le fichier comme non facultatif, par exemple dans la page de manuel OpenBSD.
Un synopsis plus précis pour GNU rm
afficherait les trois variantes :
rm
[options ...] fichier ...
rm --help
rm --version