Bash dans OSX est-il insensible à la casse?

79

Les commandes bash sur OSX sont-elles sensibles à la casse? Je tape "quel TR" et il affiche / usr / bin / TR, bien qu’il n’existe aucun fichier binaire de ce type. Même chose pour les autres fichiers binaires, une fois capitalisés. Ou est-ce que Terminal.app est peut-être en train de faire cette traduction? Comment puis-je désactiver cela?

verboze
la source
Par curiosité, pourquoi voudriez-vous désactiver cela?
Sören Kuklau
C'est une question spectaculaire. Bash dispose d'une option nocaseglob permettant de contrôler si les cas correspondent dans les plages, mais cette astuce est plus profonde que la normale localeet achèvement-ignorer-cas / nocaseglob
bmike
3
La raison pour laquelle je voulais l'éteindre est stupide, vraiment. Je suis habitué à la sensibilité à la casse lorsque je travaille au shell. Je crains seulement que cette fonctionnalité ne me fasse trébucher. Exemple, j'écris un script bash, le type incorrect 'lS'; le script fonctionnera correctement sous OSX. Je le déplace dans ma boîte à cenTOS et ça casse. Certes, cela serait facile à détecter et à corriger, mais le scénario serait évité si je pouvais faire en sorte que les scripts fonctionnent de la même manière entre les deux systèmes. J'ai découvert cela par accident et, jusqu'à présent, cela n'a pas été une nuisance. Je ne ferai donc probablement pas l'exercice de changement de système de fichiers rien que pour cela.
verboze
5
Si vous souhaitez désactiver cette option, vous devez être conscient du fait que l'insensibilité à la casse provoque des problèmes pour certaines applications, telles que SVN. Une lecture insensible à la casse peut être utile, mais SVN devient très confus si vous créez un fichier appelé "Foo", puis le référentiel crée une référence à "foo".
Une autre raison de désactiver: j’ai un script ~ / bin / CC sur mon chemin depuis les années 1980. cc plus quelques valeurs par défaut agréables. Cela a fonctionné de UNIX v6 à v7, Eunice, BSD 4.1, 4.2, 4.3, SVr4, Xenix, Gould UTX, Linux, cygwin ... et il a échoué pour la première fois sous MacOS, une récursion infinie.
Krazy Glew

Réponses:

94

C'est en fait une fonctionnalité du système de fichiers de votre disque, pas bash ou Terminal.app.

HFS + (le système de fichiers Mac) est généralement configuré pour être insensible à la casse , mais le cas préserver . Cela signifie que le système de fichiers considérera fooet FoOsera identique, mais lorsque vous créez un nouveau fichier, il se souviendra des lettres en majuscules et des autres.

Lorsque vous formatez un disque avec HFS +, vous pouvez choisir si le système de fichiers doit être sensible à la casse ou non. Si vous avez choisi de formater avec UFS (Unix FileSystem), il est toujours sensible à la casse, AFAIK.

Pour vérifier si un disque est sensible à la casse, exécutez:

 diskutil info <device>

Par exemple:

 diskutil info disk0s2

Cherchez la Name:ligne. Si cela lit quelque chose comme Mac OS Extended (Case-sensitive, Journaled)cela, cela signifie qu'il est sensible à la casse. Si elle se contente de lire Mac OS Extended(sans le Case-sensitive), il ne s'agit que de préserver la casse, mais pas de la distinguer .

DarkDust
la source
6
En dehors d'Unix, la préservation de la nature n'est pas si inhabituelle. Par exemple, NTFS est similaire: non sensible à la casse par défaut, mais vous pouvez le formater ainsi. Je pense également que la casse insensible à la casse est utilisée par défaut via Mac OS 9, mais le fait que de nombreux développeurs Mac et Windows soient paresseux à cet égard et ne se soucient pas de la casse correcte rend presque impossible le passage à la casse par défaut. , il casse de nombreuses applications. Venant d’Unix, j’ai trouvé cela très étrange au début aussi.
DarkDust
1
Je dois admettre que je n'ai jamais utilisé Mac OS classique, donc devinais. Quoi qu'il en soit, c'est la réponse, et DarkDust l'exprime mieux que moi, alors celle-ci devrait être acceptée, je pense.
stuffe
6
Chaque version de Mac OS a été insensible à la casse, tout en préservant son intégrité, pour des raisons de convivialité. Bien qu'UNIX privilégie la précision (comparaisons octets par octets des noms de fichiers), il peut s'agir d'un cauchemar pour les utilisateurs finaux qui sauvegardent accidentellement 'Resume' et 'REsume', puis se perdent lorsqu'ils ouvrent la mauvaise version et que toutes leurs modifications ont disparu. .
Dan Udey
2
D'autre part, il peut aussi s'agir d'un "cauchemar d'utilisation" lorsque vous tapez "HEAD" sur la ligne de commande, le programme / usr / bin / head (affiche les premières lignes d'un fichier) est exécuté à la place de / usr / local / bin / HEAD (à partir de LWP: faites une requête HTTP 'HEAD').
TML
2
Penser que chaque caractère majuscule correspond à un équivalent minuscule et inversement est typique des programmeurs anglophones et n'est pas indépendant des paramètres régionaux. Je ne sais pas quelle solution a été adoptée pour le turc, où les minuscules en pointillés icorrespondent aux majuscules DOTTED İ, tandis que les majuscules sans points Icorrespondent aux minuscules DOTLESS ı, mais TOUT solution sera mauvaise. Et que dire de l’Allemand ß, souvent capitalisé avec 2 Ss? Et des accents qui sont souvent laissés de côté lors de la capitalisation? Et ... La sensibilité à la casse élimine tous ces maux de tête.
Walter Tross
5

Examinez votre système de fichiers, car il existe des variantes de HFS sensibles à la casse et insensibles à la casse. La valeur par défaut est insensible à la casse, auquel cas ce n'est pas tant un cas de BASH que le système de fichiers sous-jacent. Vous pouvez tester ceci en formatant une clé USB de rechange avec l'option sensible à la casse et en copiant des fichiers sur pour répéter votre test, etc.

farcir
la source
1

Bash est définitivement sensible à la casse.

Je viens de taper 'whoami' dans le terminal et le bouton de verrouillage des majuscules était activé.

J'ai eu une réponse complètement différente de `WHOAMI '.

Je peux voir qu'il y a une commande WHOAMI avec 'qui' mais je ne le trouve pas avec 'ls'.

elfes
la source
4
Ce n'est pas le shell étant sensible à la casse, c'est le whoamiprogramme lui-même. C'est en fait le même programme que id, mais il vérifie le nom sous lequel il a été exécuté et utilise une sortie différente (équivalente à id -un) s'il est exécuté sous le nom "whoami". Cette vérification est sensible à la casse. Comparez la sortie id, WHOAMI, WhOaMi, WhoAmI, etc. De plus, comparer la sortie de ls -li /usr/bin/whoamivs ls -li /usr/bin/WHOAMI, et notez que le numéro d'inode (la première chose répertorié dans la sortie) est le même - ils sont deux façons différentes de spécifier exactement le même fichier .
Gordon Davisson