टर्मिनल केस संवेदनशील क्यों है?


14

जब मैं करता हूं - CD ..इसके बजाय cd ..
मुझे यह कहते हुए त्रुटि देता है -

CD: command not found

जब लाइनक्स कमांड की बात आती है तो टर्मिनल केस संवेदनशील क्यों है ? मेरा मतलब है कि आपको "सभी अपरकेस" या "सभी लोअरकेस" वर्णों के साथ कमांड निष्पादित करने में सक्षम होना चाहिए।

मुझे पता है कि यह किसी कारण से है, लेकिन मैं सिर्फ उत्सुक हूं।


9
मुझे लगभग ऐसा लगता है कि इस प्रश्न को फिर से शीर्षक दिया जाना चाहिए क्यों चीजें मामले के प्रति संवेदनशील हैं?
कोजिरो

15
"मेरा मतलब है कि आपको" सभी अपरकेस "या" सभी लोअरकेस "वर्णों के साथ कमांड निष्पादित करने में सक्षम होना चाहिए। वास्तव में? क्यों?
dmckee --- पूर्व मॉडरेटर ने बिल्ली

5
एक मुद्दा stty iuclc olcucहै, तो आप एक केस संवेदी टर्मिनल ;-) होने की तरह लग रहा है
स्टीफन Chazelas

1
CapsLock + c + d + CapsLock c + d से भी बदतर है
UniversallyUniqueID

जवाबों:


44

अंततः, यह चार दशक पहले यूनिक्स के रचनाकारों द्वारा की गई एक मनमानी पसंद थी। वे चीजों को केस-असंवेदनशील बनाने के लिए चुन सकते थे, जैसे एमएस-डॉस के रचनाकारों ने एक दशक बाद किया, लेकिन इसके नुकसान भी हैं।

यह अब बदलने के लिए * ix संस्कृति में बहुत गहराई से अंतर्निहित है। केस संवेदी फाइल सिस्टम eppesuig द्वारा लाया मुद्दा यह का ही हिस्सा है। macOS सिस्टम - जो यूनिक्स-आधारित हैं - आमतौर पर केस-असंवेदनशील (लेकिन केस-संरक्षण) फ़ाइल सिस्टम होते हैं, इसलिए ऐसे सिस्टम पर शेल के लिए बाहरी कमांड वास्तव में केस-असंवेदनशील व्यवहार करते हैं। लेकिन, बिलियन जैसेcd मामले संवेदनशील बने हुए हैं।

केस-असंवेदनशील फाइल सिस्टम के साथ भी, चीजों का इतिहास आपकी इच्छाओं, हुसैन के खिलाफ साजिश करता है। यदि मैं lsअपने मैक पर टाइप करता हूं, तो मुझे एक रंगीन निर्देशिका सूची मिलती है। यदि मैं LSइसके बजाय टाइप करता हूं , तब /bin/lsभी चलता है, लेकिन लिस्टिंग को रंगीन नहीं किया गया है, क्योंकि -Cध्वज जोड़ने वाला उपनाम केस-संवेदी है।

बेस्ट बस इसकी आदत डाल लें। यदि आप कर सकते हैं, तो इसे पसंद करना सीखें।


1
वास्तव में विंडोज फाइलनाम केस-संवेदी हो सकते हैं। वे उदाहरण के लिए POSIX सबसिस्टम में हैं और msdn.microsoft.com/en-us/library/ee681827%28v=vs.85%29.aspx
fpmurphy

3
यह वास्तव में आश्चर्यजनक है क्योंकि उस समय उपलब्ध कुछ सामान्य टर्मिनलों को अपरकेस में रखा गया था और उन्हें एक वर्कअराउंड लागू करना था (यदि आप इसे वास्तव में अपरकेस होना चाहते हैं तो एक पत्र से पहले एक बैकस्लैश डालें - यदि आपने लॉग इन किया तो आप सभी उपयोक्ता में अपना उपयोगकर्ता नाम टाइप कर सकते हैं। ) में लाइन अनुशासन चालक।
रैंडम 832

8

यह "टर्मिनल" समस्या नहीं है, यह एक फाइल सिस्टम फीचर है। शेल को (हमेशा केस सेंसिटिव) फाइल सिस्टम पर आपके कमांड्स को कैसे देखना चाहिए?


और क्या होगा अगर दो या अधिक कमांड मेल खाते हैं?
स्कै

1
एकमात्र विकल्प जो आपको थोड़ी मदद कर सकता है वह एक bashविकल्प है जिसे कहा जाता है cdspell: यह सही फ़ाइल नाम खोजने की कोशिश करता है भले ही आपने इसे गलत ठहराया हो, लेकिन यह केवल कमांड तर्कों के लिए काम कर रहा है
इप्सुइग

1
@HussainTamboli वहाँ आदेशों नाम दिया जा सकता cd, CD, cDऔर Cdएक अद्वितीय व्यवहार के साथ प्रत्येक।
12

7
यह वास्तव में फाइल सिस्टम फीचर या टर्मिनल फीचर नहीं है - यह एक शेल फीचर है। शेल बिल्डिंस केस-असंवेदनशील फाइल सिस्टम पर केस-सेंसिटिव होंगे। इसके अलावा, अधिकांश शेल हैश कमांड होते हैं, इसलिए कमांड वास्तव में कभी भी फाइल नहीं होते हैं , वे वास्तव में हैश से खींचे जाते हैं। कोशिश करो hash -p /bin/hostname HOSTNAMEऔर अब HOSTNAMEके लिए आदेश है /bin/hostname
कोजिरो

2
ओह, मुझे यह भी उल्लेख करना चाहिए कि आप अधिकांश गोले को कम मामले के प्रति संवेदनशील बता सकते हैं। बैश के लिए, आप बांध सकते हैं set completion-ignore-case on
कोजिरो

6

जिन तकनीकी प्रणालियों का मैं उपयोग करता हूं और उनका सम्मान लगभग विशेष रूप से संवेदनशील है: यह ओएस या प्रोग्रामिंग भाषा या कुछ और हो।

जिन अपवादों के बारे में मैं अभी सोच सकता था, वह है HTML टैग और SQL के कुछ कार्यान्वयन, और Ada प्रोग्रामिंग भाषा।

यहां तक ​​कि उन मामलों में, मुझे लगता है कि वास्तव में HTML टैग्स को लोअरकेस में लिखने के लिए, और अपरकेस में SQL क्वेरी शब्दार्थ (और बड़े पैमाने पर पैरामीटर) हैं। (अगर मैं गलत हूं तो मुझे सुधारें।) आद के लिए, Emacs मोड आपको सही कर देगा यदि आप उदाहरण के लिए एक लोअरकेस प्रक्रिया नाम टाइप करते हैं, हालांकि यह संकलन करते समय कोई फर्क नहीं पड़ेगा। इसलिए, जब मामला-असंवेदनशीलता होती है, तब भी लोगों को लगता है कि यह एक बुरा विचार है।

कारण यह है कि आपको केस-सेंसिटिविटी के साथ बहुत अधिक अभिव्यंजक शक्ति मिलती है। इतना ही नहीं मात्रात्मक - CDएक है, लेकिन CD, Cd, cD, और cdचार हैं - लेकिन अधिक महत्वपूर्ण बात, आप ऊपरी का उपयोग कर उद्देश्य, जोर, आदि व्यक्त करने और समझदारी से लोअरकेस कर सकते हैं; भी, जब प्रोग्रामिंग, आप पठनीयता में वृद्धि करेंगे।

सहज रूप से, यह स्पष्ट है कि आप नहीं पढ़ते हैं hiऔर HIउसी तरह!

लेकिन, आपको कंप्यूटर की दुनिया का उदाहरण देने के लिए, प्रोग्रामिंग भाषा एडा (1980 के दशक से) में, प्रक्रिया कोड ब्लॉक की पहली पंक्ति इस तरह दिख सकती है:

procedure body P(SCB : in out Semaphore_Control_Block) is

जैसा कि आप देख रहे हैं, प्रक्रिया और पैरामीटर नाम बड़े किए गए हैं, जैसा कि डेटाटाइप्स हैं, बाकी सब कुछ कम है। यह भी ध्यान दें कि "सभी अपरकेस" पैरामीटर नाम हमें बताता है कि यह एक संक्षिप्त है। अब, इस से तुलना करें

procedure body p(scb : in out semaphore_control_block) is

यह संभव है, क्योंकि एडा केस-असंवेदनशील है (या, सटीक होने के लिए, कंपाइलर इसे मेरे पहले उदाहरण में बदल देगा, लेकिन निश्चित रूप से आपका कोड नहीं बदलेगा)। या, कैसे के बारे में:

PROCedure body P(Scb : IN Out semaphore_CONTROL_BLOCK) iS

वह थोड़ा हास्यास्पद है, मुझे पता है; लेकिन कोई इसे लिखने के लिए काफी बेवकूफ होगा (ठीक है, शायद नहीं)। बिंदु, एक मामला संवेदनशील प्रणाली न केवल लोगों को सुसंगत होने के लिए मजबूर करेगी, उन्हें इसकी (पठनीयता) द्वारा मदद भी की जाएगी और इसका उपयोग अपने लाभ (ऊपर दिए गए संक्षिप्त उदाहरण) से किया जाएगा।


2
पास्कल और डेल्फी भी असंवेदनशील हैं। इसके अलावा, उदाहरण के लिए दो चर lengthऔर Lengthआमतौर पर एक बुरा विचार है :)
Ajasja

@ अज्जा: यह दिलचस्प है, क्योंकि अडा पास्कल की तरह है। ठीक है, मुझे लगता है कि यदि आप उन सभी को गिनते हैं, तो ऐसी भाषाओं के टन होंगे, क्योंकि बहुत सारी प्रोग्रामिंग भाषाएं हैं। लंबाई के लिए, निश्चित रूप से - लेकिन आप संभवतः इस तरह के कुछ मामले के बारे में सोच सकते हैं: मैक्स (एक व्यक्ति) के बारे में क्या है, और अधिकतम (एक फ़ंक्शन जो वास्तविक की सूची लेता है, और सबसे बड़ा रिटर्न देता है)?
इमानुएल बर्ग

अपने अंतिम उदाहरण के बारे में, आपको यह जानने में दिलचस्पी हो सकती है कि QL के सुपरबैसिक दुभाषिया ने कीवर्ड को ठीक उसी तरह से कैपिटल किया है: DEFine PROCedure Helloउदाहरण के लिए। आपको केवल पूंजीकृत बिट्स टाइप करना था , लेकिन कार्यक्रम लिस्टिंग में पूरा शब्द दिखाई दिया। यह भी लागू REMarkहै, और उस कष्टप्रद नहीं था ...
डेविड

4

यह इस तथ्य से कम या ज्यादा अजीब नहीं है कि हमारे पास शुरू करने के लिए ऊपरी और निचले मामले की वर्णमाला है। यदि आप देखते हैं /usr/bin, तो आप (बहुत) कुछ निष्पादन योग्य पूंजीकरण का शोषण करेंगे।

एक संवेदनशील नाम स्थान एक असंवेदनशील के रूप में सिर्फ दो बार बड़ा नहीं है - शब्द की लंबाई के साथ अंतर तेजी से बढ़ता है। उदाहरण के लिए, 26 अक्षरों का उपयोग करते हुए, तीन अक्षरों में 26 ^ 3 (17576) विभिन्न संभावनाएं हैं; 52 (2 * 26) वर्णों का उपयोग करते हुए 52 ^ 3 = 140608 हैं। एक खुला नामस्थान एक अच्छी बात है;)


3 कहाँ से मिला?
ctrl-alt-delor-

@ ctrl-alt-delor यह सिर्फ एक उदाहरण है: " तीन अक्षरों में 26 ^ 3 (17576) विभिन्न संभावनाएं हैं "।
गोल्डीलॉक्स

2

"ऊपरी / निचले" मामले की अवधारणा (और वास्तव में) एक स्थानीय विशिष्ट चीज़ हो सकती है, जो कि, किसी भी अन्य डिज़ाइन जटिलता के रूप में, अनुप्रयोग स्टैक में उपयोग बिंदु के जितना करीब हो सके उतना धक्का नहीं होना चाहिए, एक हिस्सा नहीं होना चाहिए। कोर।

संवेदनशील वातावरण होने के कारण इसे असंवेदनशील वातावरण में लपेटने की अनुमति मिलती है, लेकिन अन्य तरीके से नहीं।


1

यह टर्मिनल नहीं है, यह फाइल-सिस्टम है। या cd(cd एक शेल में निर्मित शेल है) के मामले में, यह मामला संवेदनशील है।

यह संभव है (कम से कम ASCII के साथ), केस असंवेदनशील बनाने के लिए। यह अब उपयोग किए गए यूनिकोड के साथ कठिन है (चाहे दो अक्षर समान हों, स्थानीय पर निर्भर हो सकते हैं)।

इसके बारे में क्या करना है

  • इसके साथ जियो।
  • इन शेल विकल्पों का प्रयास करें। वे मामले की असंवेदनशीलता की सभी समस्याओं को पेश किए बिना, एक समझौता देते हैं और चीजों को आसान बनाते हैं।
    • shopt -s nocaseglob # ये मेरे में है ~/.bashrc
    • shopt -s nocasematch # यह भी होगा ~/.bashrc
    • set completion-ignore-case on # ये मेरे में है ~/.inputrc

-2

एक प्रारंभिक बिंदु के रूप में, यह प्रश्न पूछा गया था, और इसका कारण आपको इस विषय पर बहुत चर्चा मिलेगी यदि आप Google विषय पर हैं, तो क्या यह मामला संवेदनशीलता "सामान्य" लोगों के लिए प्रोग्रामिंग भाषा या कमांड लाइन सीखने और उपयोग करने के लिए कठिन बना देता है। इंटरफेस।

अतीत में कंप्यूटर की कम शक्ति में केस सेंसिटिविटी की उत्पत्ति होती है। मामले को असंवेदनशील बनाने के लिए चीजों को असंवेदनशील बनाने के लिए जरूरी है कि कमांड को दुभाषिया या कंपाइलर को दिए जाने से पहले उसके निष्पादन से पहले एक अतिरिक्त पार्सिंग ऑपरेशन किया जाए और केस सेंसिटिविटी की सुविधा के लिए शुरुआती डिजाइनरों को कंप्यूटर की शक्ति बर्बाद करने के लिए तैयार नहीं किया गया था।

मेरा मानना ​​है कि ऊपर दी गई टिप्पणियों में कई गलत दावे हैं। सबसे पहले, मनोवैज्ञानिक आपको बताएंगे कि मनुष्य ऊपरी या निचले मामले के अक्षरों में लिखे गए शब्द या यहां तक ​​कि शब्द के अर्थ के संदर्भ में दो के संयोजन के बीच स्वचालित रूप से भेदभाव नहीं करता है। अतिरिक्त अर्थ बताने के लिए सामान्य अभिव्यंजक भाषाओं में केस का उपयोग किया जाता है। उदाहरण के लिए, किसी वाक्य में किसी शब्द को शुरू करने वाले बड़े अक्षर का उपयोग, यह इंगित करता है कि यह संभवतः एक उचित संज्ञा है। गद्य संरचना देने के लिए भी बड़े अक्षरों का उपयोग किया जाता है। उदाहरण के लिए, एक कैपिटल अक्षर, का उपयोग वाक्य की शुरुआत को इंगित करने के लिए किया जाता है। लेकिन "शब्द" और "शब्द" को मानव मन द्वारा अर्थ के रूप में देखा जाता है।

डीओएस और एडीए और पास्कल के रचनाकारों, कुछ का नाम लेने के लिए, सराहना की कि संवेदनशीलता संवेदनशीलता शुरुआत में एक अतिरिक्त बोझ थी। बाद में, "एकीकृत विकास वातावरण" (आईडीई) में पाठ संपादक, एक आरक्षित शब्द को पहचानते हुए, उस शब्द को फिर से प्राप्त कर सकते थे, जैसे कि यह शैली के अनुरूप था; प्लस इसे एक अलग रंग में प्रदर्शित करता है ताकि शब्द बाहर खड़ा हो सके। इसलिए अधिक पठनीय कोड के लिए संवेदनशीलता के मामले में तर्क तर्कहीन है। यह "सामान्य" लोगों को नहीं है। यह केवल पहले से ही मांगे गए कार्य के लिए एक अनावश्यक और कभी-कभी भ्रमित करने वाली परत जोड़ता है।

जावा एक शुरुआती द्वारा उपयोग में आसानी के दृष्टिकोण से बहुत खराब भाषा का एक चरम उदाहरण है। यह सख्त मामले की संवेदनशीलता को लागू करता है लेकिन, मूर्खतापूर्ण रूप से, प्रोग्रामर को दो कार्यों को करने की अनुमति देगा, दोनों एक ही नाम के साथ, लेकिन जो वास्तव में अलग-अलग कार्य हैं तथ्य के आधार पर एक दूसरे के लिए अलग-अलग तर्क हैं। वास्तव में, जावा एक ऐसी भाषा का एक गर्भपात है, जब विश्वविद्यालयों ने छात्रों को पास्कल सिंटैक्स पढ़ाने से इनकार कर दिया, गैर-कंप्यूटर विज्ञान पाठ्यक्रम शुरू किया, पास दर लगभग 70% से 40% तक गिर गई।

तो, संक्षेप में, मामले की संवेदनशीलता दो कारणों से आई। एक में कंप्यूटर की शक्ति की कमी थी। दूसरा यह था कि कंप्यूटर विज्ञान में अपना रास्ता खोजने वाले लोग अक्सर ऑटिस्टिक स्पेक्ट्रम पर होते हैं और "सामान्य" लोगों की जरूरतों से अच्छी तरह से संबंधित नहीं होते हैं। परिणामस्वरूप, ये लोग इस बात की सराहना नहीं कर सकते कि प्रोग्रामिंग भाषा सीखने और उपयोग करने के लिए मामला संवेदनशीलता अनावश्यक और बाधा दोनों है।


1
मैं जावा पर सेक्शन हटा दूंगा क्योंकि यह imho, ओपिनियन-बेस्ड है और पॉइंट के अलावा (मेथड-ओवरलोडिंग का केस-सेंसिटिविटी से बहुत कम है) ... मेथड / फंक्शन ओवरलोडिंग अन्य भाषाओं में भी पाया जाता है, जैसे C ++ और pl / sql नाम के लिए लेकिन दो। आपके मनोविज्ञान पैराग्राफ के लिए, मुझे लगता है कि स्रोत अच्छे होंगे ... अंत में, अंतिम पैराग्राफ, imho, राय-आधारित और आक्रामक है और इसे हटा दिया जाना चाहिए।
ऐकर्पी

आपको यह समझने के लिए कि C और इसके साथ आने वाली सभी भाषाओं ने कंप्यूटर विज्ञान के कारण को नुकसान पहुंचाया है, कृपया जाएं; लिंक्डइन . com/pulse/ … इस समस्या का मूल, या मुझे कर्नेल :-) कहना चाहिए, यह है कि प्रोग्रामर एक व्यक्तित्व प्रकार के होते हैं जो ज्ञान फैलाने के बारे में चिंतित नहीं होते हैं बल्कि नौकरी पाने के बारे में होते हैं। यदि आप इस पोस्ट में कही गई बातों से असहमत हैं तो कृपया अपने सकारात्मकता को पुष्ट करने के लिए एक तर्क सामने रखें। राय की गिनती बहुत कम है।
केविन लॉफ्रे

मैं मानता हूं कि केस सेंसिटिविटी कठिन होती है। लेकिन ध्यान दें कि यूनिक्स में लगभग सब कुछ कम मामला है, इसलिए इसे इस तरह से रखें। एक प्रमुख अपवाद है पर्यावरण चर पारंपरिक रूप से सभी राजधानियां हैं।
ctrl-alt-delor

मामले का लगातार उपयोग किया जाना चाहिए , और जैसा कि इस उत्तर में कहा गया है कि अतिरिक्त जानकारी जैसे पर्यावरण चर बनाम सामान्य शेल चर।
ctrl-alt-delor

-3

केस सेंसिटिविटी एक मूर्खतापूर्ण विचार है जिसके बारे में आया क्योंकि यूनिक्स लेखकों ने यह नहीं समझा कि एएससीआईआई आसानी से असंवेदनशील होने के लिए बनाया गया है। एक बस प्रमुख बिट्स की उपेक्षा करता है। असिसी 7 बिट कैपिटल ए के साथ बिट वैल्यू दशमलव 65 1000001 और बिट दशमलव 97 1100001 पर कोडिंग के साथ अक्षरों के साथ 7 बिट कोडिंग है। इसने सभी प्रकार के विचारों को उत्पन्न किया जैसे कि चप्पल से अलग होने के लिए चप्पल से बचने के लिए कुंजी मूल्य जोड़े में सभी चाबियाँ संख्यात्मक होनी चाहिए। बहु-मूल्य डेटाबेस को शुरू से ही महसूस किया और मामला असंवेदनशील है।


2
"मूर्खतापूर्ण" आपकी राय है। इस उत्तर में बहुत कम तथ्यात्मक है जो मैं देख सकता हूं। ओह, और क्यों खुद को ASCII तक सीमित रखें। EBCDIC भी था।
रोएमा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.