Il arrive souvent que je veuille appliquer une opération de manière récursive. Certaines commandes, telles que grep, utilisent une minuscule r pour indiquer une récursion. Par exemple
grep -r foo .
D'autres commandes semblent préférer un R majuscule:
chmod -R 755 .
Je suis constamment dans le mauvais sens et j'oublie qui est qui. Y at-il une logique derrière la sélection des arguments pour ces arguments?
--recursive
, elles ne risquent pas de faire la mauvaise chose.-r
signifie de désactiver le bit de lecture pour tous les niveauxRéponses:
La plupart des commandes POSIX qui ont l' option récursive répertoire traversal (
ls
,chmod
,chgrp
,chmod
,cp
,rm
) ont-R
pour cela.rm
a également-r
parce que c'est ce qu'il était à l'origine, bien avant POSIX.Maintenant, le comportement varie lorsque des liens symboliques sont trouvés en descendant dans l’arbre. POSIX a essayé de rendre les choses cohérentes en ajoutant les options
-L
/-H
/P
pour donner à l’utilisateur une chance de décider quoi faire avec les liens symboliques, en laissant la valeur par défaut lorsque aucun n’est fourni.POSIX
grep
n'a pas-r
ou-R
.GNU
grep
n'avait initialement ni l'un ni l'autre.-r
a été ajouté en 1998. Cela faisait suite aux liens symboliques.-R
a été ajouté comme synonyme en 2001 pour assurer la cohérence avec les autres services publics. Cela suivait toujours les liens symboliques.En 2012 (grep 2.12), il a
-r
été modifié afin de ne plus suivre les liens symboliques, probablement parce que-L
,-H
étaient déjà utilisés pour autre chose.Les BSD
grep
étaient basés sur GNU grep pendant longtemps. Certains d'entre eux ont réécrit leurs propres et ont gardé plus ou moins la compatibilité avec GNUgrep
. Apple OS / X a abordé le problème du lien symbolique différemment.-r
et-R
sont les mêmes et ne suivent pas les liens symboliques. Il y a une-S
possibilité mais qui agit commechmod
/cp
/find
l »-L
option de suivre les liens symboliques.la source
rm
avait une option récursive avant les autres. C'était-r
. Puiscp
gagné une correspondance-r
. Ensuite,ls
je voulais avoir une option récursive, mais celals -r
signifiait déjà "tri en sens inverse"-R
. Là la tension entre-R
et a-r
commencé.-R
était le seul à pouvoir être ajouté de manière cohérente à chaque utilitaire pertinent, maisrm -r
était déjà l’usage traditionnel bien connu. Puis GNU est arrivé et a déclaré: "La cohérence et la tradition sont pour les carrés, mec!"Pas du tout. Cela dépend simplement de ce que les développeurs ont choisi. Il est souvent parce que les deux
-r
et-R
sont des options valides. Dans les programmes que vous avez cités, par exemple:versions récentes de GNU
grep
:chmod
n’a pas d’-r
option alors, probablement, les développeurs préfèrent-R
. Cependant, bien sûr,-r
est une chaîne d'autorisations valide (comme l'a souligné @Arkadiusz Drabczykso), de sorte qu'elle ne peut pas vraiment être utilisée ici.la source
grep
version? GNU grep 2.12,-r
et-R
sont les mêmes. Avec chmod,-R
est défini par POSIX.grep (GNU grep) 2.15
et je me souviens de l'avoir vu dans les versions précédentes. Êtes-vous sûr que ce n'est pas le cas chez vous? Ils fournissent essentiellement les mêmes résultats dans la plupart des cas, ils ne se comportent que différemment avec les liens. En ce qui concernechmod
, il peut bien être défini par POSIX , mais qui est encore, sans doute, parce que l'originalchmod
devs ont choisiR
plusr
.-r
car c'est déjà une chaîne d'autorisations valide.Généralement, il s'agit d'une préférence personnelle du développeur. Parfois, cependant, une option en majuscule est choisie si une option en minuscule préférée est choisie pour une autre chose que les développeurs considèrent comme étant plus importante que, par exemple, une opération récursive. En cas de chmod
-r
est un mode valide. Par exemple:la source
Dans la mesure du possible, utilisez les versions GNU de ces utilitaires, puis utilisez les noms plus longs pour les options.
Non.
Ou pas beaucoup. Les utilitaires Unix ont été développés au coup par coup et les options de commande reflètent les choix individuels de leurs développeurs principaux ou uniques. Il n’ya que 26 lettres d’option minuscule ASCII disponibles, ce qui est le jeu préféré (les commandes sont généralement en minuscule pour faciliter la frappe), et ce jeu limité entraîne des conflits mnémoniques. Les conflits entraînent des incohérences car les nouvelles versions de commandes / utilitaires ont acquis de nouvelles fonctionnalités .
la source
Il y a 20 ans, lorsque j'avais appris UNIX, mon mentor m'avait dit ceci: "Tu ferais mieux de taper toujours l'option récursive en majuscule R. Parce que certaines commandes ont une signification différente en option minuscule, l'option R majuscule fonctionne généralement comme une option récursive. Et cela vous donnera la bonne habitude d’être prudent sur [rm * -Rf] en agissant en appuyant sur la touche Maj. lorsque vous tapez R. "
la source