Чи баш в OSX нечутливий?


79

Чи невідчутливі команди bash на корпусі OSX? Я набираю "який TR", і він показує / usr / bin / TR, хоча такого бінарного файлу там немає. Те ж саме стосується й інших бінарних файлів, коли вони використовуються з великої літери. Або Terminal.app, можливо, робить цей переклад? Як вимкнути це?


Чому ви хочете вимкнути це з цікавості?
Sören Kuklau

Це вражаюче питання. У Bash є можливість nocaseglob контролювати, чи збігаються випадки у діапазонах, але ця тріскавка є глибшою, ніж нормальна localeта завершення-ignore-case / nocaseglob
bmike

3
Причина, по якій я хотів її вимкнути, насправді нерозумна. Я звик сприймати чутливість під час роботи в оболонці. Я просто переживаю, що ця функція зіпсує мене. Наприклад, я пишу bash-скрипт, misype 'lS'; сценарій буде працювати нормально на OSX. Я переміщую його до своєї коробки cenTOS, і вона ламається. Зрозуміло, це було б легко виявити та виправити, але міг би уникнути сценарію цілком, якби я міг підтримувати сценарії, що працюють однаково між двома системами. Я виявив це випадково, і досі це не викликало ніяких труднощів, тому я, мабуть, не пройдуся через вправу, змінюючи файлові системи саме для цього.
вербозез

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, нескінченна рекурсія.
Krazy Glew

Відповіді:


94

Це насправді особливість файлової системи вашого диска, а не bash чи Terminal.app.

HFS + (файлова система Mac), як правило, налаштована на нечутливість регістру, але зберігає регістр . Це означає, що файлова система буде враховувати 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 підтримує точність (байт-байтове порівняння імен файлів), це може бути кошмаром зручності використання для кінцевих користувачів, які випадково зберігають "Відновити" та "Повторне використання", а потім плутаються, коли відкривають неправильну версію, і всі їх зміни не зникають .
Ден Удей

2
З іншого боку, це також може бути "кошмаром зручності користування" під час введення "HEAD" у командному рядку, коли програма / usr / bin / head (показує перші рядки файлу) виконується замість / usr / local / bin / HEAD (від LWP: зробити запит HTTP 'HEAD').
TML

2
Думаючи, що для кожного великого символу існує один еквівалент нижнього регістру, і навпаки, типово для англомовних програмістів, і не залежить від місцевості. Я не знаю, яке рішення було прийнято для турецької мови, де є iкрапка з нижньою лінією, що відповідає верхньому регістру DOTTED İ, в той час як верхня велика літера Iвідповідає нижній регістр DOTLESS ı, але будь-яке рішення буде поганим. А що з німецькою ß, часто з великої літери за 2 Sс? А акценти, які часто опускаються при написанні великих букв? І ... Чутливість до справи усуває всі ці головні болі.
Вальтер Трос

5

Погляньте на вашу файлову систему, оскільки на HFS є як чутливі до регістру, так і нечутливі регістри. За замовчуванням є нечутливим до регістру, і в цьому випадку справа не стільки у випадку з BASH, скільки в основі файлової системи. Ви можете перевірити це, відформатувавши запасний USB-накопичувач із залежною від регістру опцією та скопіювавши файли наново, щоб повторити тест тощо.



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.