Czy bash w systemie OSX nie rozróżnia wielkości liter?

79

Czy polecenia bash na OSX nie uwzględniają wielkości liter? Wpisuję „what TR” i pokazuje / usr / bin / TR, chociaż nie ma tam takiego pliku binarnego. To samo dotyczy innych plików binarnych, jeśli są wielkie. A może Terminal.app może to tłumaczenie? Jak to wyłączyć?

czasownik
źródło
Z ciekawości, dlaczego chcesz to wyłączyć?
Sören Kuklau,
To spektakularne pytanie. Bash ma opcję nocaseglob do kontrolowania, czy przypadki pasują do siebie w zakresach, ale ta odrobina sztuczki jest głębsza niż normalne localei ukończenie ignorowania przypadku / nocaseglob
bmike
3
Powód, dla którego chciałem to wyłączyć, jest naprawdę głupi. Przyzwyczaiłem się do rozróżniania wielkości liter podczas pracy w powłoce. Martwię się tylko, że ta funkcja mnie potknie. Przykład, piszę skrypt bash, błędnie „lS”; skrypt będzie działał poprawnie w OSX. Przeniosę go do mojego cenTOS-a i pęka. To prawda, że ​​byłoby to łatwe do wykrycia i naprawienia, ale mógłbym całkowicie uniknąć tego scenariusza, gdybym mógł utrzymać skrypty działające w ten sam sposób między dwoma systemami. Odkryłem to przez przypadek i jak dotąd nie było to uciążliwe, więc prawdopodobnie nie będę przechodził przez ćwiczenia zmieniające systemy plików tylko w tym celu.
czasownik
5
Powodem, dla którego chcesz to wyłączyć, jest to, że rozróżnianie wielkości liter powoduje problemy w niektórych aplikacjach, takich jak SVN. Globowanie bez rozróżniania wielkości liter może być przydatne, ale SVN bardzo się myli, jeśli utworzysz plik o nazwie „Foo”, a następnie w jakiś sposób repozytorium utworzy odniesienie do „foo”.
Kolejny powód do wyłączenia: mam skrypt ~ / bin / CC na mojej ścieżce od około 1980 roku. Cc plus kilka przyjemnych ustawień domyślnych. Działa od UNIX v6 do v7, Eunice, BSD 4.1, 4.2, 4.3, SVr4, Xenix, Gould UTX, Linux, cygwin ... i po raz pierwszy zawiódł na MacOS, nieskończona rekurencja.
Krazy Glew

Odpowiedzi:

94

W rzeczywistości jest to funkcja systemu plików na dysku, a nie bash ani Terminal.app.

HFS + (system plików Mac) jest zwykle skonfigurowany tak, aby nie rozróżniał wielkich i małych liter, ale zachowuje wielkość liter . Oznacza to, że system plików rozważy fooi FoObędzie taki sam, ale kiedy utworzysz nowy plik, zapamięta, które litery były pisane wielkimi literami, a które nie.

Podczas formatowania dysku za pomocą HFS + możesz wybrać, czy system plików ma rozróżniać małe i wielkie litery. Jeśli zdecydujesz się sformatować za pomocą UFS (Unix FileSystem), zawsze rozróżniana jest wielkość liter, AFAIK.

Aby sprawdzić, czy na dysku rozróżniana jest wielkość liter, uruchom:

 diskutil info <device>

Na przykład:

 diskutil info disk0s2

Poszukaj Name:linii. Jeśli czyta coś podobnego Mac OS Extended (Case-sensitive, Journaled), oznacza to, że rozróżnia małe i wielkie litery. Jeśli tylko czyta Mac OS Extended(bez Case-sensitive), to zachowuje tylko wielkość liter, ale nie rozróżnia wielkości liter .

DarkDust
źródło
6
Poza Unixem ochrona przyrody nie jest tak niezwykła. Na przykład NTFS jest podobny: domyślnie nie rozróżnia wielkości liter, ale można go sformatować w ten sposób. Wydaje mi się również, że domyślna wielkość liter jest niewrażliwa na system Mac OS 9, ale fakt, że wielu deweloperów komputerów Mac i Windows jest pod tym względem leniwych i nie dba o poprawną obudowę, sprawia, że ​​prawie niemożliwe jest przełączenie na rozróżnianie wielkości liter jako domyślne , psuje wiele aplikacji. Pochodząc z Uniksa, z początku uważałem to za bardzo dziwne.
DarkDust,
1
Muszę przyznać, że nigdy nie korzystałem z klasycznego Mac OS, więc zgadywałem. Tak czy inaczej, to jest odpowiedź, a DarkDust ujął to lepiej niż ja, więc myślę, że ta powinna zostać zaakceptowana.
faszerowane
6
Każda wersja systemu Mac OS nie uwzględnia wielkości liter, ale zachowuje zachowanie ze względu na użyteczność. Podczas gdy UNIX preferuje precyzję (porównanie nazw plików bajt po bajcie), może to być koszmar użyteczności dla użytkowników końcowych, którzy przypadkowo zapisują „Wznów” i „Wznów”, a potem się mylą, gdy otwierają niewłaściwą wersję i wszystkie ich zmiany znikają .
Dan Udey
2
Z drugiej strony, może to być również „koszmar użyteczności” podczas wpisywania „HEAD” w wierszu poleceń, w wyniku czego program / usr / bin / head (pokaż pierwsze wiersze pliku) jest wykonywany zamiast / usr / local / bin / HEAD (z LWP: złóż żądanie HTTP „HEAD”).
TML
2
Myślenie, że dla każdej wielkiej litery jest jeden odpowiednik małych liter i na odwrót jest typowe dla programistów anglojęzycznych i nie jest niezależne od ustawień regionalnych. Nie wiem, jakie rozwiązanie przyjęto dla języka tureckiego, w którym jest kropkowana mała litera iodpowiadająca wielkiej İkropce DOTTED , podczas gdy bez kropki wielka litera Iodpowiada małej kropce DOTLESS ı, ale ŻADNE rozwiązanie będzie złe. A co z Niemcami ß, często pisanymi wielkimi literami 2 Ss? A akcenty, które często są pomijane przy pisaniu dużymi literami? I ... Wrażliwość na wielkość liter usuwa wszystkie te bóle głowy.
Walter Tross,
5

Spójrz na swój system plików, ponieważ w systemie plików HFS są rozróżniane duże i małe litery. Domyślnie wielkość liter nie rozróżnia. W takim przypadku nie jest to tak naprawdę przypadek BASH, ale bazowy system plików. Możesz to przetestować, formatując zapasową pamięć USB z opcją rozróżniania wielkości liter i kopiując pliki w celu powtórzenia testu itp.

farsz
źródło
1

Bash zdecydowanie rozróżnia wielkość liter.

Właśnie wpisałem „whoami” w terminalu, a przycisk Caps Lock był włączony.

Otrzymałem zupełnie inną odpowiedź niż `WHOAMI '.

Widzę, że istnieje komenda WHOAMI z „która”, ale nie mogę jej znaleźć z „ls”.

elfy
źródło
4
W powłoce nie jest rozróżniana wielkość liter, to whoamisam program. W rzeczywistości jest to ten sam program id, ale sprawdza, jaką nazwę uruchomiono, i używa innego wyjścia (równoważnego id -un), jeśli działa pod nazwą „whoami”. W tej kontroli rozróżniana jest wielkość liter. Porównaj wyjście id, WHOAMI, WhOaMi, WhoAmI, itd. Ponadto, porównaj wyjście ls -li /usr/bin/whoamiVS ls -li /usr/bin/WHOAMI, i pamiętać, że numer i-węzła (pierwszą rzeczą wymienione na wyjściu) jest taka sama - są dwa różne sposoby określania dokładnie ten sam plik .
Gordon Davisson