Bash in OSX non fa distinzione tra maiuscole e minuscole?


79

I comandi bash su OSX non fanno distinzione tra maiuscole e minuscole? Digito "quale TR" e mostra / usr / bin / TR, sebbene non ci sia tale binario lì. Stessa cosa per gli altri binari, se maiuscole. O Terminal.app sta forse facendo questa traduzione? Come lo spengo?


Per curiosità, perché vorresti disattivarlo?
Sören Kuklau,

Questa è una domanda spettacolare. Bash ha un'opzione nocaseglob per controllare se i casi corrispondono negli intervalli, ma questo piccolo trucco è più profondo del normale localee completamento-ignora-case / nocaseglob
bmike

3
Il motivo per cui volevo spegnerlo è davvero stupido. Sono abituato alla distinzione tra maiuscole e minuscole quando lavoro nella shell. Sono solo preoccupato che questa funzione mi farà inciampare. Esempio, scrivo uno script bash, mistype 'lS'; lo script funzionerà bene su OSX. Lo sposto nella mia scatola cenTOS e si rompe. Certo, questo sarebbe facile da rilevare e correggere, ma potrei evitare completamente lo scenario se potessi mantenere gli script funzionanti allo stesso modo tra i due sistemi. L'ho scoperto per caso, e finora non è stato un fastidio, quindi probabilmente non passerò attraverso l'esercizio cambiando i filesystem solo per questo.
verboze,

5
Il motivo per cui si desidera disattivare questa opzione è che l'insensibilità alle maiuscole causa problemi per alcune app, come SVN. Il globbing senza distinzione tra maiuscole e minuscole potrebbe essere utile, ma SVN diventa molto confuso se si crea un file chiamato "Foo", quindi in qualche modo il repository crea un riferimento a "foo".

Un altro motivo per disabilitare: ho avuto uno script ~ / bin / CC nel mio percorso dal 1980 circa. Cc più alcune impostazioni predefinite piacevoli. Ha funzionato da UNIX v6 a v7, Eunice, BSD 4.1, 4.2, 4.3, SVr4, Xenix, Gould UTX, Linux, cygwin ... e non è riuscito per la prima volta su MacOS, infinita ricorsione.
Krazy Glew,

Risposte:


94

Questa è in realtà una caratteristica del filesystem del tuo disco, non bash o Terminal.app.

HFS + (il filesystem Mac) è generalmente configurato per non distinguere tra maiuscole e minuscole, ma preservare le maiuscole . Ciò significa che il file system considererà fooe FoOsarà lo stesso, ma quando crei un nuovo file ricorderà quali lettere sono state capitalizzate e quali no.

Quando si formatta un disco con HFS + è possibile scegliere se il file system deve distinguere tra maiuscole e minuscole. Se scegli di formattare con UFS (Unix FileSystem) fa sempre distinzione tra maiuscole e minuscole, AFAIK.

Per verificare se un disco fa distinzione tra maiuscole e minuscole, eseguire:

 diskutil info <device>

Per esempio:

 diskutil info disk0s2

Cerca la Name:linea. Se legge qualcosa del genere Mac OS Extended (Case-sensitive, Journaled)significa che fa distinzione tra maiuscole e minuscole. Se si legge solo Mac OS Extended(senza l' Case-sensitive), allora è solo caso preservare , ma non tra maiuscole e minuscole .


6
Al di fuori di Unix, il caso che preserva la natura non è così insolito. Ad esempio, NTFS è simile: non fa distinzione tra maiuscole e minuscole per impostazione predefinita, ma è possibile formattarlo così com'è. Penso anche che l' insensibilità alle maiuscole / minuscole sia predefinita tramite Mac OS 9, ma il fatto che molti sviluppatori Mac e Windows siano pigri in questo senso e non si preoccupino del case corretto rende quasi impossibile passare al case sensitive come impostazione predefinita , rompe molte app. Venendo da Unix, all'inizio l'ho trovato anche molto strano.
DarkDust,

1
Devo ammettere che non ho mai usato Classic Mac OS, quindi è stato indovinare. Ad ogni modo, questa è la risposta, e DarkDust l'ha messa meglio di me, quindi questa dovrebbe essere accettata, credo.
stuffe,

6
Ogni versione di Mac OS non fa distinzione tra maiuscole e minuscole, ma per motivi di usabilità. Mentre UNIX privilegia la precisione (confronti byte per byte dei nomi dei file), può essere un incubo di usabilità per gli utenti finali che salvano accidentalmente 'Riprendi' e 'Riprendi' e poi si confondono quando aprono la versione sbagliata e tutte le loro modifiche sono sparite .
Dan Udey,

2
D'altra parte, può anche essere un "incubo di usabilità" quando si digita "HEAD" alla riga di comando, il programma / usr / bin / head (mostra le prime righe di un file) viene eseguito invece di / usr / local / bin / HEAD (da LWP: effettua una richiesta HTTP 'HEAD').
TML

2
Pensare che per ogni carattere maiuscolo ci sia un equivalente in minuscolo e viceversa è tipico dei programmatori di lingua inglese e non è indipendente dalla locale. Non so quale soluzione sia stata adottata per il turco, dove c'è la minuscola tratteggiata icorrispondente alla maiuscola İDOTTED, mentre la maiuscola senza punto Icorrisponde alla minuscola DOTLESS ı, ma QUALSIASI soluzione sarà cattiva. E che dire del tedesco ß, spesso capitalizzato con 2 Ssecondi? E gli accenti che vengono spesso esclusi quando si utilizza la maiuscola? E ... La sensibilità del case elimina tutti questi mal di testa.
Walter Tross,

5

Dai un'occhiata al tuo filesystem, in quanto su HFS sono presenti sia maiuscole che minuscole. L'impostazione predefinita non distingue tra maiuscole e minuscole, nel qual caso non è tanto un caso di BASH, ma il file system sottostante. Puoi testarlo formattando una chiavetta USB di riserva con l'opzione case sensitive e copiando i file su a per ripetere il test, ecc.



1

Bash è sicuramente sensibile al maiuscolo / minuscolo.

Ho appena digitato "whoami" nel terminale e il pulsante di blocco maiuscole era attivo.

Ho ottenuto una risposta completamente diversa da "WHOAMI".

Vedo che esiste un comando WHOAMI con 'quale' ma non riesco a trovarlo con 'ls'.


4
Questa non è la distinzione tra maiuscole e minuscole, è il whoamiprogramma stesso. In realtà è lo stesso programma di id, ma verifica quale nome è stato eseguito e utilizza un output diverso (equivalente a id -un) se eseguito con il nome "whoami". Tale controllo fa distinzione tra maiuscole e minuscole. Confrontare l'output di id, WHOAMI, WhOaMi, WhoAmI, ecc Inoltre, confrontare l'output di ls -li /usr/bin/whoamivs ls -li /usr/bin/WHOAMI, e si noti che il numero di inode (la prima cosa di cui l'uscita) è lo stesso - sono due modi diversi di specificare lo stesso file esatto .
Gordon Davisson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.