Je sais que rm -f file1
cela supprimera de force file1
sans me le demander.
Je sais également que rm -i file1
cela m'invitera avant de supprimerfile1
Maintenant, si vous exécutez rm -if file1
, cela supprimera également de force file1
sans me le demander.
Cependant, si vous exécutez rm -fi file1
, cela m'invitera avant de supprimer file1
.
Est-il donc vrai que lors de la combinaison des options de commande, la dernière aura priorité? comme rm -if
, alors -f
aura priorité, mais rm -fi
alors le -i
sera prioritaire.
La ls
commande par exemple, peu importe si vous avez dit ls -latR
ou ls -Rtal
.
Donc, je suppose que cela n'a d'importance que lorsque vous avez des options de commande contradictoires comme rm -if
, est-ce correct?
command-line
rm
command
options
Alcabary
la source
la source
Réponses:
Lors de l'utilisation
rm
avec les deux options-i
et-f
, la première sera ignorée. Ceci est documenté dans la norme POSIX :et aussi dans la
info
page GNU :Voyons ce qui se passe sous le capot:
rm
traite son option avecgetopt(3)
, spécifiquementgetopt_long
. Cette fonction traitera les arguments d'option dans la ligne de commande (**argv
) par ordre d'apparition:Cette fonction est généralement appelée en boucle jusqu'à ce que toutes les options soient traitées. Dans cette perspective de fonctions, les options sont traitées dans l'ordre. Ce qui se passe en réalité, cependant, dépend de l'application, car la logique d'application peut choisir de détecter les options en conflit, de les remplacer ou de présenter une erreur. Pour le cas de
rm
et les optionsi
etf
, ils se superposent parfaitement. Derm.c
:Les deux options définissent les mêmes variables, et l'état de ces variables sera la dernière option dans la ligne de commande. L'effet est conforme au standard POSIX et à la
rm
documentation.la source
rm
). Je pense qu'il est rare qu'une commande prenne jamais le premier paramètre d'une option et ignore les arguments qui changeraient une option déjà définie.Oui, car
rm
c'est valable. Si la dernière option remplace les précédentes, cela dépend du programme individuel lui-même. De «info rm»À titre d'indication
info
générale : est généralement plus détaillé queman
, qui lui-même est généralement plus détaillé que l'--help
option.la source
Il n'y a pas de "priorité" pour les drapeaux, chaque programme les gère comme il le souhaite. La plupart font un effort pour collecter tous les drapeaux et vérifier les conflits, pour les outils standard (comme ceux référencés
rm(1)
), les normes pertinentes peuvent exiger quelque chose (mais là encore, votre version particulière peut être bâclée dans l'interprétation des cas d'angle de la norme / ne pas être spécifiquement testée pour eux).Pour le programmeur qui écrit le programme, il est plus facile de considérer les arguments (drapeaux et autres) dans un ordre strict de gauche à droite, et peut-être de renflouer en frappant un accroc. Si vous utilisez une bibliothèque pour gérer les indicateurs (comme
getopt(3)
, il existe plusieurs versions flottantes), le programmeur fait probablement ce qui est le plus facile / naturel. Les programmeurs sont des gens, les gens sont paresseux (ou du moins n'aiment pas penser à l'explosion combinatoire).la source