OSX केस-असंवेदनशील में बैश है?


79

क्या OSX केस असंवेदनशील पर बैश कमांड हैं? मैं "जो TR" टाइप करता हूं और यह / usr / bin / TR दिखाता है, हालांकि वहां ऐसा कोई बाइनरी नहीं है। अन्य बायनेरिज़ के लिए एक ही बात, जब पूंजीकृत हो। या Terminal.app शायद यह अनुवाद कर रहा है? मैं इसे कैसे बंद करूं?


जिज्ञासा से बाहर, आप इसे बंद क्यों करना चाहेंगे?
सॉरेन कुक्लाउ

यह एक शानदार सवाल है। बैश एक है nocaseglob चाहे श्रेणियों में मामलों मैच नियंत्रित करने के लिए विकल्प है, लेकिन प्रवंचना का यह छोटा सा सामान्य से अधिक गहरा है localeऔर पूरा होने-उपेक्षा दर-मामला / nocaseglob
bmike

3
जिस कारण से मैं इसे बंद करना चाहता था वह वास्तव में मूर्खतापूर्ण है। मुझे शेल में काम करने के दौरान संवेदनशीलता के मामले में इस्तेमाल किया जाता है। मुझे सिर्फ इस बात की चिंता है कि यह फीचर मुझे ऊपर ले जाएगा। उदाहरण के लिए, मैं एक बैश स्क्रिप्ट लिखता हूं, गलत 'एलएस'; स्क्रिप्ट OSX पर ठीक चलेगी। मैं इसे अपने cenTOS बॉक्स में ले जाता हूं, और यह टूट जाता है। दी गई, यह पता लगाना और ठीक करना आसान होगा, लेकिन पूरी तरह से परिदृश्य से बचा जा सकता है अगर मैं स्क्रिप्ट को दो प्रणालियों के बीच उसी तरह काम कर सकता हूं। मुझे यह दुर्घटना से पता चला, और यह इस प्रकार अब तक एक उपद्रव नहीं हुआ है, इसलिए मैं शायद इसके लिए केवल फाइल बदलने वाले व्यायाम प्रणालियों से नहीं गुजरूंगा।
11:30

5
जिस कारण से आप इसे बंद करना चाहते हैं, वह यह है कि असंवेदनशीलता एसवीएन जैसे कुछ ऐप्स के लिए समस्या पैदा करती है। केस असंवेदनशील ग्लोबबिंग उपयोगी हो सकता है, लेकिन एसवीएन बहुत भ्रमित हो जाता है यदि आप "फू" नामक एक फाइल बनाते हैं, तो किसी तरह रिपॉजिटरी "फू" का संदर्भ बनाता है।

अक्षम करने का एक और कारण: मेरे पास लगभग १ ९ c० के बाद से मेरे रास्ते में एक स्क्रिप्ट ~ / बिन / सीसी है। cc प्लस कुछ सुखद चूक। यह UNIX v6 से v7, Eunice, BSD 4.1, 4.2, 4.3, SVr4, Xenix, Gould UTX, Linux, cygwin ... के माध्यम से काम कर चुका है और यह पहली बार MacOS, अनंत पुनरावृत्ति में विफल रहा।
क्रेजी गेलव

जवाबों:


94

यह वास्तव में आपके डिस्क के फाइल सिस्टम का एक फीचर है, न कि bash या Terminal.app।

एचएफएस + (मैक फाइलसिस्टम) को आमतौर पर केस असंवेदनशील लेकिन केस संरक्षण के लिए कॉन्फ़िगर किया जाता है । इसका मतलब है कि फाइल सिस्टम समान होगा fooऔर FoOएक जैसा होगा, लेकिन जब आप एक नई फाइल बनाएंगे तो यह याद रखेगा कि कौन से अक्षर कैपिटल में आए और कौन से नहीं।

जब आप HFS + के साथ डिस्क को प्रारूपित करते हैं तो आप यह चुन सकते हैं कि फ़ाइल सिस्टम को संवेदनशील होना चाहिए या नहीं। यदि आपने UFS (यूनिक्स फाइलसिस्टम) के साथ प्रारूपण करना चुना है, तो यह हमेशा मामला संवेदनशील होता है, AFAIK।

यह जांचने के लिए कि क्या डिस्क संवेदनशील है, चलाएं:

 diskutil info <device>

उदाहरण के लिए:

 diskutil info disk0s2

Name:लाइन के लिए देखो । यदि यह कुछ पढ़ता है Mac OS Extended (Case-sensitive, Journaled)तो इसका मतलब है कि यह केस-संवेदी है। यदि यह सिर्फ Mac OS Extended(बिना Case-sensitive) पढ़ता है तो यह केवल मामला संरक्षण है, लेकिन मामला संवेदनशील नहीं है


6
यूनिक्स के बाहर, प्रकृति को संरक्षित करने का मामला इतना असामान्य नहीं है। उदाहरण के लिए, NTFS समान है: डिफ़ॉल्ट रूप से संवेदनशील मामला नहीं है, लेकिन आप इसे प्रारूपित कर सकते हैं इसलिए यह है। मुझे यह भी लगता है कि केस असंवेदनशील डिफ़ॉल्ट मैक ओएस 9 के माध्यम से आया है, लेकिन तथ्य यह है कि बहुत सारे मैक और विंडोज डेवलपर्स इस संबंध में आलसी हैं और सही आवरण के बारे में परवाह नहीं करते हैं यह डिफ़ॉल्ट रूप से संवेदनशील केस में स्विच करना लगभग असंभव बना देता है , यह बहुत सारे ऐप्स को तोड़ता है। यूनिक्स से आते हुए, मुझे पहली बार में यह बहुत अजीब लगा।
डार्कडस्ट

1
मुझे स्वीकार करना होगा कि मैंने कभी क्लासिक मैक ओएस का उपयोग नहीं किया, इसलिए अनुमान लगा रहा था। किसी भी तरह से, यह जवाब है, और डार्कडस्ट ने इसे मुझसे बेहतर रखा है, इसलिए इसे मुझे स्वीकार किया जाना चाहिए।
स्टफ

6
मैक ओएस का हर संस्करण प्रयोज्य कारणों से केस-असंवेदनशील-लेकिन-संरक्षण रहा है। हालांकि UNIX सटीक (फ़ाइल नाम की बाइट-बाइट तुलना) का पक्षधर है, यह अंत उपयोगकर्ताओं के लिए एक प्रयोज्य दुःस्वप्न हो सकता है जो गलती से 'फिर से शुरू' और 'पुनः आरंभ' को बचा लेते हैं और फिर गलत संस्करण खोलने पर भ्रमित हो जाते हैं और उनके सभी परिवर्तन समाप्त हो जाते हैं ।
डान उडे

2
दूसरी ओर, यह प्रोग्राम / usr / bin / head (फ़ाइल की पहली पंक्तियाँ) के बजाय / usr / लोकल के बजाय प्रोग्राम में कमांड लाइन के परिणाम में "HEAD" टाइप करते समय "प्रयोज्य दुःस्वप्न" भी हो सकता है। / बिन / हेड (एलडब्ल्यूपी से: एक HTTP 'हेड' अनुरोध करें)।
TML

2
यह सोचकर कि हर बड़े चरित्र के लिए, एक लोअरकेस समतुल्य है और इसके विपरीत अंग्रेजी बोलने वाले प्रोग्रामर की खासियत है, और यह स्थानीय-स्वतंत्र नहीं है। मुझे नहीं पता कि तुर्की के लिए क्या समाधान अपनाया गया है, जहां डॉटेड iअपरकेस के अनुरूप डॉटेड लोअरकेस है İ, जबकि डॉटलेस अपरकेस डोटलस लोअरकेस से Iमेल खाती है ı, लेकिन कोई भी समाधान खराब होगा। और जर्मन के बारे में क्या ß, अक्सर 2 Sएस के साथ पूंजीकृत ? और ऐसे लहजे जो अक्सर बड़े होने पर बाहर रह जाते हैं? और ... केस संवेदनशीलता इन सभी सिरदर्द के साथ दूर होती है।
वाल्टर ट्रॉस

5

अपने फ़ाइल सिस्टम पर एक नज़र डालें, क्योंकि HFS पर संवेदनशील और केस असंवेदनशील विविधताएं दोनों हैं। डिफ़ॉल्ट केस असंवेदनशील है, जिस स्थिति में यह BASH का मामला नहीं है, लेकिन अंतर्निहित फाइल सिस्टम है। आप केस संवेदनशील विकल्प के साथ एक अतिरिक्त यूएसबी स्टिक को प्रारूपित करके इसका परीक्षण कर सकते हैं, और अपने परीक्षण को दोहराने के लिए फ़ाइलों की प्रतिलिपि बना सकते हैं, आदि।



1

बैश निश्चित रूप से संवेदनशील है।

मैंने टर्मिनल में `whoami 'टाइप किया और कैप लॉक बटन चालू था।

मुझे `WHOAMI 'से बिल्कुल अलग प्रतिक्रिया मिली।

मैं देख सकता हूँ कि 'जो' के साथ एक WHOAMI कमांड है, लेकिन मैं इसे 'ls' के साथ नहीं ढूँढ सकता।


4
यह शेल संवेदनशील होने का मामला नहीं है, यह whoamiकार्यक्रम ही है। यह वास्तव में के रूप में एक ही कार्यक्रम है id, लेकिन यह जाँच करता है कि यह किस नाम के रूप में चलाया गया था, और id -unअगर "ओयामी" नाम के तहत चलाया जाता है तो एक अलग आउटपुट (समतुल्य ) का उपयोग करता है । वह मामला संवेदनशील है। के उत्पादन की तुलना करें id, WHOAMI, WhOaMi, WhoAmI, आदि इसके अलावा, के उत्पादन की तुलना ls -li /usr/bin/whoamiबनाम ls -li /usr/bin/WHOAMI, और ध्यान दें कि आइनोड संख्या (उत्पादन में सूचीबद्ध पहली बात यह है) एक ही है - वे ठीक उसी फ़ाइल को निर्दिष्ट करने के दो अलग अलग तरीकों रहे हैं ।
गॉर्डन डेविसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.