Là bash trong OSX không nhạy cảm?


79

Các lệnh bash trên trường hợp OSX không nhạy cảm? Tôi gõ "which TR" và nó hiển thị / usr / bin / TR, mặc dù không có nhị phân như vậy ở đó. Điều tương tự cho các nhị phân khác, khi viết hoa. Hoặc là Terminal.app có thể thực hiện bản dịch này? Làm thế nào để tôi tắt cái này?


Vì tò mò, tại sao bạn lại muốn tắt cái này?
Sören Kuklau

Đây là một câu hỏi ngoạn mục. Bash có nocaseglob tùy chọn để kiểm soát xem trường hợp trận đấu trong phạm vi này, nhưng điều này ít thủ đoạn gian trá là sâu hơn bình thường localehoàn-lờ-trường hợp / nocaseglob
bmike

3
Lý do tôi muốn tắt nó là ngớ ngẩn, thực sự. Tôi đã quen với trường hợp nhạy cảm khi làm việc tại vỏ. Tôi chỉ lo lắng tính năng này sẽ làm tôi vấp ngã. Ví dụ, tôi viết một tập lệnh bash, gõ nhầm 'lS'; tập lệnh sẽ chạy tốt trên OSX. Tôi di chuyển nó vào hộp cenTOS của tôi và nó bị hỏng. Cấp, điều này sẽ dễ dàng phát hiện và sửa chữa, nhưng có thể tránh hoàn toàn kịch bản nếu tôi có thể giữ các tập lệnh hoạt động theo cùng một cách giữa hai hệ thống. Tôi đã phát hiện ra điều này một cách tình cờ, và nó đã không gây phiền toái cho đến nay, vì vậy tôi có lẽ sẽ không trải qua các bài tập thay đổi hệ thống tập tin chỉ cho việc này.
verboze

5
Lý do bạn muốn tắt tính năng này là trường hợp không nhạy cảm gây ra sự cố cho một số ứng dụng, như SVN. Trường hợp không nhạy cảm có thể hữu ích, nhưng SVN sẽ rất bối rối nếu bạn tạo một tệp có tên "Foo", sau đó bằng cách nào đó, kho lưu trữ tạo một tham chiếu đến "foo".

Một lý do khác để vô hiệu hóa: Tôi đã có một tập lệnh ~ / bin / CC trong đường dẫn của tôi kể từ khoảng năm 1980. cc cộng với một số mặc định dễ chịu. Nó đã hoạt động từ UNIX v6 đến v7, Eunice, BSD 4.1, 4.2, 4.3, SVr4, Xenix, Gould UTX, Linux, cygwin ... và lần đầu tiên nó thất bại trên MacOS, đệ quy vô hạn.
Krazy Glew

Câu trả lời:


94

Đây thực sự là một tính năng của hệ thống tập tin của đĩa của bạn, không phải bash hay Terminal.app.

HFS + (hệ thống tập tin Mac) thường được cấu hình để không phân biệt chữ hoa chữ thường nhưng bảo quản trường hợp . Điều này có nghĩa là hệ thống tệp sẽ xem xét fooFoOgiống nhau, nhưng khi bạn tạo một tệp mới, nó sẽ ghi nhớ chữ cái nào được viết hoa và chữ nào không.

Khi bạn định dạng đĩa bằng HFS +, bạn có thể chọn xem hệ thống tệp có phân biệt chữ hoa hay không. Nếu bạn chọn định dạng bằng UFS (Unix FileSystem) thì nó luôn phân biệt chữ hoa chữ thường, AFAIK.

Để kiểm tra xem đĩa có phân biệt chữ hoa chữ thường hay không, hãy chạy:

 diskutil info <device>

Ví dụ:

 diskutil info disk0s2

Hãy tìm Name:dòng. Nếu nó đọc một cái gì đó giống như Mac OS Extended (Case-sensitive, Journaled)nó có nghĩa là nó phân biệt chữ hoa chữ thường. Nếu nó chỉ đọc Mac OS Extended(không có Case-sensitive) thì đó chỉ là trường hợp bảo tồn chứ không phải trường hợp nhạy cảm .


6
Bên ngoài Unix, trường hợp bảo tồn thiên nhiên không quá bất thường. Ví dụ, NTFS là tương tự: không phân biệt chữ hoa chữ thường theo mặc định, nhưng bạn có thể định dạng nó như vậy. Tôi cũng nghĩ rằng trường hợp không nhạy cảm được mặc định xuất hiện thông qua Mac OS 9, nhưng thực tế là rất nhiều nhà phát triển Mac và Windows lười biếng về mặt này và không quan tâm đến việc sử dụng vỏ chính xác khiến gần như không thể chuyển sang phân biệt chữ hoa chữ thường như mặc định , nó phá vỡ rất nhiều ứng dụng. Đến từ Unix, ban đầu tôi cũng thấy nó rất lạ.
DarkDust

1
Tôi phải thừa nhận rằng tôi chưa bao giờ sử dụng Classic Mac OS, vì vậy đã đoán được. Dù bằng cách nào, đây là câu trả lời, và DarkDust đưa nó tốt hơn tôi nên tôi nghĩ điều này nên được chấp nhận.
nhồi

6
Mọi phiên bản của Mac OS đều không phân biệt chữ hoa chữ thường nhưng vẫn bảo quản, vì lý do khả năng sử dụng. Mặc dù UNIX ủng hộ độ chính xác (so sánh từng byte của tên tệp), nhưng đó có thể là cơn ác mộng về khả năng sử dụng đối với người dùng cuối vô tình lưu 'Resume' và 'REsume' và sau đó bị nhầm lẫn khi mở phiên bản sai và mọi thay đổi của họ đều biến mất .
Dan Udey

2
Mặt khác, nó cũng có thể là "cơn ác mộng về khả năng sử dụng" khi gõ "ĐẦU" vào kết quả dòng lệnh trong chương trình / usr / bin / head (hiển thị các dòng đầu tiên của tệp) được thực thi thay vì / usr / local / bin / HEAD (từ LWP: tạo yêu cầu HTTP 'Head').
TML

2
Nghĩ rằng đối với mỗi ký tự viết hoa, có một chữ thường tương đương và ngược lại là điển hình của các lập trình viên nói tiếng Anh, và không độc lập với ngôn ngữ địa phương. Tôi không biết giải pháp nào đã được áp dụng cho tiếng Thổ Nhĩ Kỳ, trong đó có chữ thường chấm itương ứng với chữ hoa DOTTED İ, trong khi chữ hoa không có dấu chấm Itương ứng với chữ thường DOTLESS ı, nhưng BẤT K Solution giải pháp nào sẽ xấu. Còn người Đức ß, thường viết hoa với 2 Ss thì sao? Và những điểm nhấn thường bị bỏ qua khi viết hoa? Và ... Độ nhạy của trường hợp không còn với những cơn đau đầu này.
Walter Tross

5

Hãy xem hệ thống tập tin của bạn, vì có cả các biến thể không phân biệt chữ hoa chữ thường và chữ hoa chữ thường trên HFS. Mặc định là không phân biệt chữ hoa chữ thường, trong trường hợp đó không phải là trường hợp BASH, mà là hệ thống tệp cơ bản. Bạn có thể kiểm tra điều này bằng cách định dạng một thanh USB dự phòng với tùy chọn phân biệt chữ hoa chữ thường và sao chép các tệp qua ato lặp lại bài kiểm tra của bạn, v.v.



1

Bash chắc chắn là trường hợp nhạy cảm.

Tôi vừa gõ 'whoami' vào thiết bị đầu cuối và nút khóa mũ được bật.

Tôi nhận được một phản hồi hoàn toàn khác với 'WHOAMI'.

Tôi có thể thấy có một lệnh WHOAMI với 'mà' nhưng tôi không thể tìm thấy nó với 'ls'.


4
Đây không phải là vỏ là trường hợp nhạy cảm, đó là whoamichính chương trình. Nó thực sự là cùng một chương trình id, nhưng nó kiểm tra tên nó đã được chạy và sử dụng một đầu ra khác (tương đương id -un) nếu chạy dưới tên "whoami". Kiểm tra đó là trường hợp nhạy cảm. Hãy so sánh sản lượng id, WHOAMI, WhOaMi, WhoAmI, vv Ngoài ra, so sánh kết quả của ls -li /usr/bin/whoamivs ls -li /usr/bin/WHOAMI, và lưu ý rằng số inode (điều đầu tiên được liệt kê trong đầu ra) là như nhau - họ là hai cách khác nhau để xác định tập tin chính xác giống .
Gordon Davisson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.