Es kommt oft vor, dass ich eine Operation rekursiv anwenden möchte. Einige Befehle, z. B. grep, verwenden ein kleines r, um eine Rekursion anzuzeigen. Beispielsweise
grep -r foo .
Andere Befehle scheinen ein R in Großbuchstaben zu bevorzugen:
chmod -R 755 .
Ich verstehe diese ständig falsch und vergesse, was was ist. Gibt es eine Logik für die Auswahl des Falls für diese Argumente?
--recursive
, werden sie wahrscheinlich nicht das Falsche tun.-r
bedeutet dies, dasAntworten:
Die meisten POSIX - Befehle , die rekursive Directory - Traversal - Option (
ls
,chmod
,chgrp
,chmod
,cp
,rm
) haben-R
dafür.rm
hat auch-r
weil es das war was es anfangs war, lange vor POSIX.Das Verhalten ändert sich nun, wenn beim Durchlaufen des Baums Symlinks gefunden werden. POSIX versucht , die Dinge in Einklang , indem die machen
-L
/-H
/P
Optionen dem Benutzer die Möglichkeit zu geben , zu entscheiden , was mit Symlinks verlassen den Standard zu tun , wenn keine unbestimmten vorgesehen ist.POSIX
grep
hat kein-r
oder-R
.GNU hatte
grep
anfangs keine.-r
wurde 1998 hinzugefügt. Das war nach Symlinks.-R
wurde 2001 als Synonym für die Übereinstimmung mit den anderen Versorgungsunternehmen hinzugefügt. Das folgten noch Symlinks.Im Jahr 2012 (grep 2.12),
-r
geändert wurde , so dass es nicht mehr Symlinks gefolgt, vielleicht weil-L
,-H
schon für etwas anderes verwendet wurden.BSDs
grep
basierten lange Zeit auf GNU grep. Einige von ihnen haben ihre eigenen umgeschrieben und sind mehr oder weniger kompatibel mit GNUgrep
. Apple OS / X hat das Symlink-Problem anders gelöst.-r
und-R
sind gleich und folgen keinen symlinks. Es gibt eine-S
Option , aber die wie wirktchmod
/cp
/find
‚s --L
Option Symlinks zu folgen.quelle
rm
hatte eine rekursive Option vor den anderen. Es war-r
. Danncp
ein Matching gewonnen-r
. Wolltels
dann eine rekursive Option haben,ls -r
bedeutete aber schon "umgekehrte Sortierung", so musste es sein-R
. Dort begann die Spannung zwischen-R
und-r
.-R
war die einzige, die konsequent zu jedem relevanten Dienstprogramm hinzugefügt werden konnte, war aberrm -r
bereits die bekannte traditionelle Verwendung. Dann kam GNU und sagte: "Beständigkeit und Tradition sind für Quadrate, Mann!"Überhaupt keine. Es kommt einfach darauf an, was die Entwickler gewählt haben. Es liegt oft an beidem
-r
und-R
sind gültige Optionen. In den von Ihnen zitierten Programmen zum Beispiel:aktuelle Versionen von GNU
grep
:chmod
es gibt keine-r
möglichkeit also ziehen die devs vermutlich vor-R
. Es handelt sich jedoch natürlich-r
um eine gültige Berechtigungszeichenfolge ( auf die @Arkadiusz Drabczykso hingewiesen hat), sodass sie dort nicht wirklich verwendet werden kann.quelle
grep
Version? GNU grep 2.12-r
und-R
sind gleich. Mit chmod-R
wird durch POSIX definiert.grep (GNU grep) 2.15
und ich erinnern uns, dies in früheren Versionen gesehen zu haben. Sind Sie sicher, dass dies bei Ihnen nicht der Fall ist? Sie liefern in den meisten Fällen im Wesentlichen die gleichen Ergebnisse, sie verhalten sich nur bei Verknüpfungen unterschiedlich. Waschmod
kann es gut von POSIX definiert werden , aber das ist immer noch, vermutlich, weil die ursprünglichenchmod
Entwickler wählenR
überr
.-r
da dies bereits eine gültige Berechtigungszeichenfolge ist.Meistens kommt es auf eine persönliche Präferenz des Entwicklers an. Manchmal wird jedoch eine Großbuchstabenoption gewählt, wenn eine bevorzugte Kleinbuchstabenoption für etwas anderes verwendet wird, das nach Ansicht der Entwickler wichtiger ist, als beispielsweise rekursiv zu arbeiten. Bei chmod
-r
handelt es sich um einen gültigen Modus. Beispielsweise:quelle
Verwenden Sie nach Möglichkeit die GNU-Versionen dieser Dienstprogramme, und verwenden Sie dann die längeren Namen für Optionen.
Nein.
Oder nicht viel. Die Unix-Dienstprogramme wurden stückweise entwickelt, und die Befehlsoptionen spiegeln die individuellen Entscheidungen ihrer Haupt- oder Alleinentwickler wider. Es stehen nur 26 ASCII-Kleinbuchstaben zur Verfügung. Dies ist der bevorzugte Satz (Befehle werden im Allgemeinen zur Vereinfachung der Eingabe in Kleinbuchstaben geschrieben). Dieser begrenzte Satz führt zu mnemonischen Konflikten. Konflikte führen zu Inkonsistenzen, da neue Versionen von Befehlen / Dienstprogrammen neue Funktionen erhalten .
quelle
Als ich vor 20 Jahren UNIX gelernt hatte, sagte mir mein Mentor: "Sie sollten die rekursive Option immer in Großbuchstaben R eingeben. Einige Befehle haben eine andere Bedeutung für die Option r, aber Großbuchstaben R funktionieren meistens als rekursive Option überall. Und es wird Ihnen eine gute Angewohnheit geben, auf [rm * -Rf] vorsichtig zu sein, indem Sie ärgerlich die Umschalttaste drücken, wenn Sie R eingeben. "
quelle