В bash в OSX регистр не учитывается?

79

Команды bash в OSX не чувствительны к регистру? Я набираю «which TR», и он показывает / usr / bin / TR, хотя там нет такого бинарника. То же самое для других двоичных файлов, когда они пишутся с заглавной буквы. Или Terminal.app, возможно, делает этот перевод? Как мне это отключить?

verboze
источник
Из любопытства, почему вы хотите отключить это?
Сёрен Куклау
Это захватывающий вопрос. Bash имеет опцию nocaseglob для контроля совпадения случаев в диапазонах, но эта небольшая хитрость глубже, чем у обычного localeи ignore-case-завершения / nocaseglob
bmike
3
Причина, по которой я хотел выключить это, действительно глупа. Я привык к чувствительности к регистру при работе на оболочке. Я просто волнуюсь, что эта функция меня опрокинет. Например, я пишу сценарий bash, mistype 'lS'; скрипт будет работать нормально на OSX. Я перемещаю это к своей коробке cenTOS, и это ломается. Конечно, это было бы легко обнаружить и исправить, но можно было бы полностью избежать сценария, если бы я мог поддерживать одинаковую работу сценариев между двумя системами. Я обнаружил это случайно, и до сих пор это не доставляло неудобств, поэтому я, вероятно, не буду проходить упражнение по изменению файловых систем только для этого.
verboze
5
Причина, по которой вы хотите отключить это, заключается в том, что нечувствительность к регистру вызывает проблемы для некоторых приложений, таких как SVN. Глобальное нечувствительное к регистру регистр может быть полезным, но SVN очень запутывается, если вы создаете файл с именем «Foo», а затем каким-то образом репозиторий создает ссылку на «foo».
Еще одна причина для отключения: у меня был скрипт ~ / bin / CC в моем пути с 1980 года. Cc плюс некоторые приятные настройки по умолчанию. Он работал с UNIX v6 по v7, Eunice, BSD 4.1, 4.2, 4.3, SVr4, Xenix, Gould UTX, Linux, cygwin ... и впервые провалился на MacOS, бесконечная рекурсия.
Крейзи Глеу

Ответы:

94

На самом деле это особенность файловой системы вашего диска, а не bash или Terminal.app.

HFS + (Мак файловой системы), как правило , выполнен с возможностью быть чувствительны к регистру , но случай , сохранение . Это означает , что файловая система будет рассматривать fooи FoOтакой же, но когда вы создаете новый файл , он будет помнить , какие буквы где капитализируются и которые не были.

Когда вы форматируете диск с помощью HFS +, вы можете выбрать, должна ли файловая система учитывать регистр или нет. Если вы выбрали форматирование с использованием UFS (Unix FileSystem), оно всегда чувствительно к регистру, AFAIK.

Чтобы проверить, чувствителен ли диск к регистру, запустите:

 diskutil info <device>

Например:

 diskutil info disk0s2

Ищите Name:линию. Если он читает что-то вроде этого, Mac OS Extended (Case-sensitive, Journaled)это означает, что он чувствителен к регистру. Если он просто читает Mac OS Extended(без Case-sensitive), то он сохраняет только регистр, но не учитывает регистр .

DarkDust
источник
6
За пределами Unix, кейс, сохраняющий природу, не так уж необычен. Например, NTFS похожа: по умолчанию она не чувствительна к регистру, но вы можете отформатировать ее так, как она есть. Я также считаю, что регистр без учета регистра по умолчанию появился в Mac OS 9, но тот факт, что многие разработчики Mac и Windows ленивы в этом отношении и не заботятся о правильном регистре, делает практически невозможным переключение на регистр с учетом регистра по умолчанию. , это ломает много приложений. Исходя из Unix, сначала мне это тоже показалось очень странным.
DarkDust
1
Я должен признать, что я никогда не использовал Classic Mac OS, поэтому догадывался. В любом случае, это ответ, и DarkDust выразил это лучше, чем я, так что этот должен быть принят, я думаю.
Stuff
6
Каждая версия Mac OS не учитывает регистр, но сохраняет его в целях удобства использования. В то время как UNIX предпочитает точность (побайтовое сравнение имен файлов), это может быть кошмаром для удобства использования для конечных пользователей, которые случайно сохраняют «Resume» и «REsume», а затем запутываются, когда открывают неправильную версию и все их изменения исчезают. ,
Дэн Удей
2
С другой стороны, это также может быть «кошмаром юзабилити», когда ввод «HEAD» в командной строке приводит к выполнению программы / usr / bin / head (показать первые строки файла) вместо / usr / local / bin / HEAD (из LWP: сделать HTTP-запрос HEAD).
TML
2
Думая, что для каждого символа в верхнем регистре есть один эквивалент в нижнем регистре, и наоборот, это типично для англоязычных программистов и не зависит от локали. Я не знаю , какое решение было принято на турецком, где пунктирная строчные буквы , iсоответствующие прописные пунктирная İ, в то время как без точки в верхнем регистре Iсоответствует нижнему регистру Dotless ı, но любое решение будет плохо. А как насчет немца ß, часто с заглавной буквы с 2 Sс? И акценты, которые часто пропускаются при использовании заглавных букв? И ... Чувствительность к регистру устраняет все эти головные боли.
Уолтер Тросс
5

Взгляните на свою файловую систему, так как в HFS есть как регистрозависимые, так и регистрозависимые варианты. По умолчанию регистр не учитывается, в этом случае речь идет не о BASH, а о базовой файловой системе. Вы можете проверить это, отформатировав запасную флешку с учетом регистра, скопировав файлы, чтобы повторить тест и т. Д.

stuffe
источник
1

Bash определенно чувствителен к регистру.

Я просто набрал "whoami" в терминал, и кнопка блокировки заглавных букв была включена.

Я получил совершенно другой ответ от "WHOAMI".

Я вижу, что есть команда WHOAMI с «каким», но я не могу найти ее с «ls».

эльфы
источник
4
Это не оболочка, чувствительная к регистру, это сама whoamiпрограмма. На самом деле это та же самая программа id, но она проверяет, под каким именем она запускалась, и использует другой вывод (эквивалентный id -un), если запускается под именем «whoami». Эта проверка чувствительна к регистру. Сравните вывод id, WHOAMI, WhOaMi, WhoAmIи т.д. Кроме того , сравните вывод ls -li /usr/bin/whoamiVS ls -li /usr/bin/WHOAMI, и обратите внимание , что номер индексного дескриптора (первое , перечисленных в выводе) одно и то же - они два разных способа задания точно такой же файл ,
Гордон Дэвиссон