¿Bash en OSX no distingue entre mayúsculas y minúsculas?

79

¿Los comandos bash en OSX no distinguen entre mayúsculas y minúsculas? Escribo "which TR" y muestra / usr / bin / TR, aunque no existe ese binario allí. Lo mismo para otros binarios, cuando se capitalizan. ¿O es que Terminal.app está haciendo esta traducción? ¿Cómo apago esto?

verboze
fuente
Por curiosidad, ¿por qué querrías apagar esto?
Sören Kuklau
Esta es una pregunta espectacular. Bash tiene una opción de nocaseglob para controlar si los casos coinciden en rangos, pero este pequeño truco es más profundo que el normal localey completa-ignore-case / nocaseglob
bmike
3
La razón por la que quería apagarlo es una tontería, de verdad. Estoy acostumbrado a mayúsculas y minúsculas cuando trabajo en el shell. Me preocupa que esta característica me haga tropezar. Ejemplo, escribo un script bash, escribe mal 'lS'; el script se ejecutará bien en OSX. Lo muevo a mi caja cenTOS y se rompe. De acuerdo, esto sería fácil de detectar y corregir, pero podría evitar el escenario por completo si pudiera mantener los scripts funcionando de la misma manera entre los dos sistemas. Descubrí esto por accidente, y hasta ahora no ha sido una molestia, por lo que probablemente no pasaré por el ejercicio cambiando los sistemas de archivos solo por esto.
verboze el
55
La razón por la que desea desactivar esto es que la insensibilidad a las mayúsculas y minúsculas causa problemas para algunas aplicaciones, como SVN. El bloqueo de mayúsculas y minúsculas podría ser útil, pero SVN se confunde mucho si crea un archivo llamado "Foo", de alguna manera el repositorio crea una referencia a "foo".
Otra razón para deshabilitar: he tenido un script ~ / bin / CC en mi camino desde alrededor de 1980. cc más algunos valores predeterminados agradables. Ha funcionado desde UNIX v6 hasta v7, Eunice, BSD 4.1, 4.2, 4.3, SVr4, Xenix, Gould UTX, Linux, cygwin ... y falló por primera vez en MacOS, recursión infinita.
Krazy Glew

Respuestas:

94

Esta es en realidad una característica del sistema de archivos de su disco, no bash o Terminal.app.

HFS + (el sistema de archivos Mac) generalmente está configurado para no ser sensible a mayúsculas y minúsculas, pero preservar mayúsculas y minúsculas . Esto significa que el sistema de archivos considerará fooy FoOserá el mismo, pero cuando cree un nuevo archivo recordará qué letras se escribieron con mayúscula y cuáles no.

Cuando formatea un disco con HFS +, puede elegir si el sistema de archivos debe distinguir entre mayúsculas y minúsculas o no. Si elige formatear con UFS (Unix FileSystem) siempre distingue entre mayúsculas y minúsculas, AFAIK.

Para verificar si un disco distingue entre mayúsculas y minúsculas, ejecute:

 diskutil info <device>

Por ejemplo:

 diskutil info disk0s2

Busca la Name:línea. Si lee algo así Mac OS Extended (Case-sensitive, Journaled)significa que distingue entre mayúsculas y minúsculas. Si sólo se lee Mac OS Extended(sin Case-sensitive) entonces es sólo el caso preservando pero no entre mayúsculas y minúsculas .

Polvo oscuro
fuente
66
Fuera de Unix, el caso de preservar la naturaleza no es tan inusual. Por ejemplo, NTFS es similar: no distingue entre mayúsculas y minúsculas por defecto, pero puede formatearlo para que sea así. También creo que la distinción entre mayúsculas y minúsculas es predeterminada a través de Mac OS 9, pero el hecho de que muchos desarrolladores de Mac y Windows sean flojos a este respecto y no les importe la carcasa correcta hace que sea casi imposible cambiar a mayúsculas y minúsculas por defecto , rompe muchas aplicaciones. Al venir de Unix, también me pareció muy extraño al principio.
DarkDust
1
Tengo que admitir que nunca usé Mac OS clásico, por lo que estaba adivinando. De cualquier manera, esta es la respuesta, y DarkDust lo puso mejor que yo, por lo que creo que debería aceptarse.
stuffe
66
Todas las versiones de Mac OS han sido sensibles a mayúsculas y minúsculas, pero por razones de usabilidad. Si bien UNIX favorece la precisión (comparaciones byte por byte de nombres de archivos), puede ser una pesadilla de usabilidad para los usuarios finales que accidentalmente guardan 'Resume' y 'REsume' y luego se confunden cuando abren la versión incorrecta y todos sus cambios desaparecen .
Dan Udey
2
Por otro lado, puede también ser una "pesadilla usabilidad" al escribir "HEAD" en los resultados de línea de comandos en el programa / usr / bin / cabeza (mostrar primeras líneas de un archivo) que se está ejecutando en lugar de / usr / local / bin / HEAD (desde LWP: hacer una solicitud HTTP 'HEAD').
TML
1
Pensando que para cada carácter en mayúscula hay un equivalente en minúscula y viceversa es típico de los programadores de habla inglesa, y no es independiente de la configuración regional. No sé qué solución se ha adoptado para el turco, donde hay minúsculas punteadas icorrespondientes a las mayúsculas punteadas İ, mientras que las mayúsculas sin Ipuntos corresponden a las minúsculas DOTLESS ı, pero CUALQUIER solución será mala. ¿Y qué hay del alemán ß, a menudo capitalizado con 2 Ss? ¿Y acentos que a menudo se dejan de lado al capitalizar? Y ... La sensibilidad a mayúsculas y minúsculas elimina todos estos dolores de cabeza.
Walter Tross
5

Eche un vistazo a su sistema de archivos, ya que hay variaciones entre mayúsculas y minúsculas en HFS. El valor predeterminado no distingue entre mayúsculas y minúsculas, en cuyo caso no se trata tanto de BASH como del sistema de archivos subyacente. Puede probar esto formateando una memoria USB de repuesto con la opción de mayúsculas y minúsculas y copiando archivos para repetir su prueba, etc.

stuffe
fuente
1

Bash definitivamente distingue entre mayúsculas y minúsculas.

Simplemente escribí 'whoami' en la terminal y el botón de bloqueo de mayúsculas estaba activado.

Obtuve una respuesta completamente diferente de 'WHOAMI'.

Puedo ver que hay un comando de WHOAMI con 'which' pero no puedo encontrarlo con 'ls'.

elfos
fuente
44
Este no es el shell que distingue entre mayúsculas y minúsculas, es el whoamiprograma en sí. En realidad, es el mismo programa que id, pero comprueba con qué nombre se ejecutó y usa una salida diferente (equivalente a id -un) si se ejecuta con el nombre "whoami". Ese cheque distingue entre mayúsculas y minúsculas. Comparar la salida de id, WHOAMI, WhOaMi, WhoAmI, etc Además, comparar la salida del ls -li /usr/bin/whoamifrente ls -li /usr/bin/WHOAMI, y tenga en cuenta que el número de i-nodo (el primero que aparece en la salida) es el mismo - son dos formas diferentes de especificar exactamente el mismo archivo .
Gordon Davisson el