A menudo sucede que quiero aplicar una operación de forma recursiva. Algunos comandos, como grep, usan una r minúscula para indicar la recursividad. Por ejemplo
grep -r foo .
Otros comandos parecen preferir una R mayúscula:
chmod -R 755 .
Constantemente los estoy entendiendo mal y olvidando cuál es cuál. ¿Hay alguna lógica detrás de la selección de casos para estos argumentos?
--recursive
, no es probable que hagan lo incorrecto.-r
significa desarmar el bit de lectura para todos los nivelesRespuestas:
La mayoría de los comandos de POSIX que tienen opción de directorio recorrido recursivo (
ls
,chmod
,chgrp
,chmod
,cp
,rm
) tienen-R
por ello.rm
también tiene-r
porque eso es lo que era inicialmente, mucho antes de POSIX.Ahora, el comportamiento varía cuando se encuentran enlaces simbólicos al caminar por el árbol. POSIX trató de hacer las cosas consistentes agregando las opciones
-L
/-H
/P
para dar al usuario la oportunidad de decidir qué hacer con los enlaces simbólicos, dejando el valor predeterminado cuando ninguno se proporciona sin especificar.POSIX
grep
no tiene-r
o-R
.GNU
grep
inicialmente no tenía ninguno.-r
fue agregado en 1998. Eso estaba siguiendo enlaces simbólicos.-R
fue agregado como sinónimo en 2001 por coherencia con las otras utilidades. Eso seguía siguiendo los enlaces simbólicos.En 2012 (grep 2.12),
-r
fue cambiado por lo que ya no sigue los enlaces simbólicos, posiblemente porque-L
,-H
ya se utiliza para otra cosa.Los BSD
grep
se basaron en GNU grep durante mucho tiempo. Algunos de ellos han reescrito los suyos y han mantenido más o menos compatibilidad con GNUgrep
. Apple OS / X abordó el problema del enlace simbólico de manera diferente.-r
y-R
son iguales y no siguen enlaces simbólicos. Sin-S
embargo, hay una opción que actúa como la opciónchmod
/cp
/ para seguir enlaces simbólicos.find
-L
fuente
rm
tenía una opción recursiva antes que las demás. Fue-r
. Luegocp
ganó una coincidencia-r
. Entoncesls
quería tener una opción recursiva, perols -r
ya significaba "clasificación inversa", así que tenía que serlo-R
. Allí la tensión entre-R
y-r
comenzó.-R
era el único que podía agregarse constantemente a todas las utilidades relevantes, perorm -r
ya era el uso tradicional bien conocido. Entonces apareció GNU y dijo "¡la consistencia y la tradición son para los cuadrados, hombre!"Ninguno en absoluto. Simplemente depende de lo que elijan los desarrolladores. A menudo es porque ambas
-r
y-R
son opciones válidas. En los programas que citó, por ejemplo:versiones recientes de GNU
grep
:chmod
no tiene-r
opción, por lo que, presumiblemente, los desarrolladores prefieren-R
. Sin embargo, por supuesto,-r
es una cadena de permisos válida (como lo señaló @Arkadiusz Drabczykso), por lo que realmente no se puede usar allí.fuente
grep
version GNU grep 2.12,-r
y-R
son lo mismo. Con chmod,-R
se define por POSIX.grep (GNU grep) 2.15
y recuerdo haber visto esto en versiones anteriores. ¿Estás seguro de que no es el caso en el tuyo? Proporcionan esencialmente los mismos resultados en la mayoría de los casos, solo se comportan de manera diferente con los enlaces. En cuanto achmod
, que bien puede ser definido por POSIX, pero que todavía es, presumiblemente, debido a que los originaleschmod
desarrolladores optaronR
por encimar
.-r
ya que esa es una cadena de permisos válida.Principalmente, se reduce a una preferencia personal del desarrollador. A veces, sin embargo, se elige una opción en mayúscula si se toma una opción en minúscula preferida para otra cosa que los desarrolladores creen que es más importante que, por ejemplo, operar de forma recursiva. En caso de chmod
-r
es un modo válido. Por ejemplo:fuente
Siempre que sea posible, use las versiones GNU de estas utilidades y luego puede usar los nombres más largos para las opciones.
No.
O no mucho. Las utilidades de Unix se desarrollaron poco a poco y las opciones de comando reflejan las elecciones individuales de sus desarrolladores principales o únicos. Solo hay 26 letras de opción en minúsculas ASCII disponibles, que es el conjunto preferido (los comandos generalmente están en minúsculas para facilitar la escritura), y este conjunto limitado conduce a conflictos mnemónicos. Los conflictos generan inconsistencias a medida que las nuevas versiones de comandos / utilidades adquieren nuevas características .
fuente
Hace 20 años, cuando aprendí UNIX, mi mentor me dijo así: "Será mejor que escriba la opción recursiva en mayúscula R siempre. Debido a que algunos comandos tienen un significado diferente en la opción minúscula r, pero R mayúscula funciona principalmente como opción recursiva en todas partes. Y le dará la buena costumbre de ser cauteloso con [rm * -Rf] al presionar la tecla Mayús al presionar R. "
fuente