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


79

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


Из любопытства, почему вы хотите отключить это?
— Сёрен Куклау

Это захватывающий вопрос. 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), то он сохраняет только регистр, но не учитывает регистр .


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, а о базовой файловой системе. Вы можете проверить это, отформатировав запасную флешку с учетом регистра, скопировав файлы, чтобы повторить тест и т. Д.



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, и обратите внимание , что номер индексного дескриптора (первое , перечисленных в выводе) одно и то же - они два разных способа задания точно такой же файл ,
— Гордон Дэвиссон
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.