Terminal kutusu neden duyarlıdır?


14

Yaptığımda - CD ..bunun yerine cd ..
bana hata diyerek hata veriyor -

CD: command not found

Linux komutları söz konusu olduğunda terminal kutusu neden hassastır? Yani komutu "büyük harf" veya "küçük harf" karakterleriyle uygulayabilmeniz gerekir.

Bunun bir nedenden dolayı olduğunu biliyorum, ama sadece merak ediyorum.


9
Neredeyse bu sorunun yeniden adlandırılması gerektiğini hissediyorum. Olaylar neden büyük / küçük harfe duyarlıdır?
kojiro

15
"Yani komutu" büyük harf "veya" küçük harf "karakterleriyle uygulayabilmeniz gerekir." Gerçekten mi? Neden?
dmckee --- eski moderatör yavru kedi

5
Bir Sayı stty iuclc olcucEğer bir vaka duyarsız terminali ;-) olması gibi hissediyorum
Stéphane Chazelas

1
CapsLock + c + d + CapsLock c + d'den daha kötü
UniversallyUniqueID

Yanıtlar:


44

Nihayetinde, Unix'in yaratıcıları tarafından şimdi kırk yıl önce yapılan keyfi bir seçimdi. MS-DOS'un yaratıcıları on yıl sonra yaptıkları gibi olaylara duyarsız hale getirmeyi seçebilirlerdi, ancak bunun dezavantajları da var.

* İx kültürüne artık çok fazla gömülü değil. Eppesuig tarafından ortaya çıkan büyük / küçük harfe duyarlı dosya sistemi sorunu bunun bir parçasıdır. Unix tabanlı macOS sistemleri tipik olarak büyük / küçük harfe duyarlı olmayan (ancak büyük / küçük harf korumalı) dosya sistemlerine sahiptir, bu nedenle bu sistemlerde kabuğun dışındaki komutlar aslında büyük / küçük harfe duyarlı değildir. Ancak, yerleşiklercd büyük / küçük harfe duyarlı kalır.

Büyük / küçük harfe duyarlı olmayan bir dosya sisteminde bile, şeylerin tarihi isteklerinize karşı komplo kurar Hussain. Ben yazarsanız lsbenim Mac, ben listeleyen bir colorized dizin olsun. LSBunun yerine ben yazarsam, /bin/lshala çalışır, ancak -Cbayrağı ekleyen diğer ad büyük / küçük harf duyarlı olduğundan liste renklendirilmez .

En iyisi buna alışmak. Yapabilirsen, sevmeyi öğren.


1
Aslında Windows dosya adları büyük / küçük harfe duyarlı olabilir. Bunlar örneğin POSIX alt içindedir ve görün msdn.microsoft.com/en-us/library/ee681827%28v=vs.85%29.aspx
fpmurphy

3
O zamanlar mevcut olan bazı yaygın terminaller sadece büyük harf olduğundan ve bir geçici çözüm uygulamak zorunda kaldıkları için gerçekten şaşırtıcıdır ( gerçekten büyük harf olmasını istiyorsanız bir harfin önüne ters eğik çizgi koymak - giriş yaptığınızda kullanıcı adınızı tüm büyük harflerle yazdıysanız etkinleştirilir satır disiplin sürücüsünde.
Random832

8

Bu bir "terminal" sorunu değil, bir dosya sistemi özelliğidir. Kabuk (her zaman büyük / küçük harfe duyarlı) dosya sistemindeki komutlarınızı nasıl aramalıdır?


Ve iki veya daha fazla komut eşleşirse ne olur?
scai

1
Size biraz yardımcı olabilecek tek seçenek bashdenilen bir seçenektir cdspell: yanlış yazmış olsanız bile doğru dosya adını bulmaya çalışır, ancak yalnızca komut argümanları için çalışır .
eppesuig

1
@HussainTamboli komutları vardır adlandırılmış olabilir cd, CD, cDve Cdeşsiz bir davranışla her.
scai

7
Gerçekten bir dosya sistemi veya bir terminal özelliği değil - bir kabuk özelliği. Shell yerleşikleri, büyük / küçük harfe duyarlı olmayan bir dosya sisteminde büyük / küçük harfe duyarlı olacaktır. Ayrıca, çoğu kabuk hash komutları, bu yüzden komutlar asla gerçekten dosya değildir, aslında bir karmadan çizilir. Deneyin hash -p /bin/hostname HOSTNAMEve şimdi HOSTNAMEkomutudur /bin/hostname.
Kojiro

2
Ayrıca, çoğu merminin daha az büyük / küçük harfe duyarlı olduğunu söyleyebileceğinizden bahsetmeliyim. Bash için, bağlanabilirsiniz set completion-ignore-case on.
Kojiro

6

Kullandığım ve saygı duyduğum teknik sistemler neredeyse tamamen büyük / küçük harfe duyarlıdır: işletim sistemi veya programlama dili veya başka bir şey olsun.

Şu anda düşünebildiğim istisnalar HTML etiketleri ve SQL'in bazı uygulamaları ve Ada programlama dilidir.

Bu gibi durumlarda bile, HTML etiketlerini küçük harflerle yazmak için güçlü eğilimler olduğunu ve SQL sorgusu semantiğini büyük harflerle (ve büyük harflerle yazılmış parametreler) düşünüyorum. (Yanılıyorsam beni düzeltin.) Ada'da olduğu gibi, örneğin derlerken önemli olmayan bir küçük ad yordamı yazdığınızda Emacs modu sizi düzeltir. Yani, büyük / küçük harfe duyarsızlık olsa bile, insanlar bunun kötü bir fikir olduğu konusunda hemfikir.

Bunun nedeni, büyük / küçük harf duyarlılığı ile çok daha etkileyici bir güç elde etmenizdir. Sadece nicel - CDbiri, ancak CD, Cd, cD, ve cddört - ama daha da önemlisi, üst-kullanma vb amacını, vurgu, ifade edebilir ve makul küçük harfe; ayrıca, programlama yaparken okunabilirliği artırırsınız.

Sezgisel, okumaz açıktır hive HIaynı yolu!

Ancak, size bir bilgisayar dünyası örneği vermek için, Ada programlama dilinde (1980'lerden itibaren), bir prosedür kod bloğunun ilk satırı şöyle görünebilir:

procedure body P(SCB : in out Semaphore_Control_Block) is

gördüğünüz gibi, yordam ve parametre adları büyük harflerle yazılır, veri türleri gibi, diğer her şey küçük harflidir. Ayrıca "tümü büyük harf" parametre adının bize bunun bir kısaltma olduğunu söylediğini unutmayın. Şimdi bunu karşılaştırın

procedure body p(scb : in out semaphore_control_block) is

Bu, Ada büyük / küçük harfe duyarlı olmadığından (veya tam olarak söylemek gerekirse, derleyici ilk örneğimdeki gibi değiştirecektir, ancak elbette kodunuzu değiştirmeyecektir). Veya, nasıl:

PROCedure body P(Scb : IN Out semaphore_CONTROL_BLOCK) iS

Bu biraz saçma, biliyorum; ama birisi bu şekilde yazacak kadar aptal olur (belki de değil). Mesele şu ki, büyük / küçük harfe duyarlı bir sistem insanları tutarlı olmaya zorlamakla kalmayacak, aynı zamanda onlara yardımcı olacak (okunabilirlik) ve avantajlarına göre kullanacaktır (yukarıdaki kısaltma örneği).


2
Pascal ve Delphi de büyük / küçük harfe duyarsızdır. Ayrıca, örneğin iki değişkenli lengthve Lengthgenellikle kötü bir fikir :)
Ajasja

@Ajasja: Bu ilginç, çünkü Ada Pascal'a çok benziyor. Sanırım hepsini saysaydınız, bu tür tonlarca dil olurdu, çünkü çok fazla programlama dili var. Uzunluğa gelince, elbette - ama muhtemelen böyle bir durumu düşünebilirsiniz: Max (bir kişi) ve max (gerçeklerin bir listesini alan ve en büyük olanı döndüren bir işlev) ne olacak?
Emanuel Berg

Son örneğinizle ilgili olarak, QL'nin SuperBasic yorumlayıcısının anahtar kelimeleri tam olarak bu şekilde kullandığını bilmek isteyebilirsiniz: DEFine PROCedure Helloörneğin. Yalnızca zorunda tip harfle bitleri, ancak tam bir kelime programı listelerinde çıktı. Bu da başvurdu REMarkve o kadar sinir bozucu değildi ...
David Given

4

Başlamak için büyük ve küçük harfli bir alfabemiz olduğundan daha fazla veya daha az garip değil. Eğer bakarsanız /usr/bin, (çok) çok az çalıştırılabilir dosyanın büyük / küçük harfe yarar olduğunu fark edeceksiniz.

Büyük / küçük harfe duyarlı bir ad alanı, duyarsız olanın yalnızca iki katı kadar büyük değildir - fark, kelime uzunluğu ile katlanarak artar. Örneğin, 26 karakter kullanarak üç harfle 26 ^ 3 (17576) farklı olasılık vardır; 52 (2 * 26) karakter kullanarak 52 ^ 3 = 140608 vardır. Açık bir ad alanı iyi bir şeydir;)


3'ü nereden aldın?
ctrl-alt-delor

@ ctrl-alt-delor Bu sadece bir örnek: " Üç harfle 26 ^ 3 (17576) farklı olasılık var ".
goldilocks

2

"Üst / alt" durum kavramı, başka herhangi bir tasarım karmaşıklığının uygulama yığınında kullanım noktasına olabildiğince yakın itilmesi gereken yerel ayara özgü bir şey olabilir (ve aslında). çekirdek.

Büyük / küçük harfe duyarlı bir ortama sahip olmak, büyük / küçük harfe duyarlı olmayan bir ortama sarmanıza izin verir, ancak başka türlü değil.


1

Terminal değil, dosya sistemidir. Ya da cd(cd yerleşik bir kabuk) durumunda, bu büyük / küçük harfe duyarlıdır.

(En azından ASCII ile), büyük / küçük harfe duyarsız hale getirmek mümkün olabilirdi. Şimdi kullanılan unicode ile bu daha zordur (iki karakterin aynı olup olmadığı yerele bağlı olabilir).

Bu konuda ne yapmalı

  • Onunla yaşa.
  • Bu kabuk seçeneklerini deneyin. Vaka duyarsızlığının tüm problemlerini ortaya çıkarmadan uzlaşma sağlar ve işleri kolaylaştırırlar.
    • shopt -s nocaseglob # bu benim içimde ~/.bashrc
    • shopt -s nocasematch # bu da olurdu ~/.bashrc
    • set completion-ignore-case on # bu benim içimde ~/.inputrc

-2

Bir başlangıç ​​noktası olarak, bu sorunun sorulmasının nedeni ve konuyu Google'da kullanırsanız üzerinde çok fazla tartışma bulmanızın nedeni, büyük / küçük harfe duyarlılığın "normal" kişilerin bir programlama dili veya komut satırı öğrenmesini ve kullanmasını zorlaştırmasıdır. arayüz.

Büyük / küçük harf duyarlılığının kökleri geçmişte bilgisayarların düşük gücünden kaynaklanmaktadır. Durumun büyük / küçük harfe duyarlı olmaması için, komut yorumlayıcıya veya derleyiciye yürütülmeden önce bir ek ayrıştırma işlemi yapılmasını gerektirdi ve ilk tasarımcılar, büyük / küçük harfe duyarlılığın rahatlığı için bilgisayarın gücünü boşa harcamadılar.

Yukarıda yapılan yorumlarda bir takım yanlış iddialar olduğuna inanıyorum. İlk olarak, psikologlar size insanların büyük veya küçük harflerle yazılmış bir kelime veya hatta kelimenin anlamı açısından ikisinin bir kombinasyonu arasında otomatik olarak ayrımcılık yapmadığını söyleyecektir. Vaka, ek bir anlam ifade etmek için normal ifade dillerinde kullanılır. Örneğin, bir cümlede bir kelimeyi başlatan büyük harf kullanılması, büyük olasılıkla uygun bir isim olduğunu gösterir. Büyük harfler de nesir yapısı vermek için kullanılır. Örneğin, bir cümlenin başlangıcını belirtmek için büyük harf kullanılır. Fakat “Kelime” ve “kelime” insan zihni tarafından aynı anlama gelir.

DOS ve ADA ve Pascal'ın yaratıcıları, birkaçını belirtmek gerekirse, vaka duyarlılığının yeni başlayanlar için ek bir yük olduğunu takdir ettiler. Daha sonra, bir yedek sözcüğü tanıyan "Entegre Geliştirme Ortamları" ndaki (IDE'ler) metin editörleri bu kelimeyi yine de stille tutarlı olacak şekilde yeniden düzenleyebilir; artı kelimeyi öne çıkarmak için farklı bir renkte görüntüleyin. Dolayısıyla, büyük / küçük harfe duyarlılığın daha okunabilir kod için yaptığı iddiası yanlıştır. İnsanları “normal” yapmaz. Zaten talepkar bir göreve gereksiz ve bazen kafa karıştırıcı bir katman ekler.

Java, bir acemi tarafından kullanım kolaylığı açısından çok zayıf bir dilin aşırı bir örneğidir. Sıkı büyük / küçük harf duyarlılığı uygular, ancak aptalca, programcıya aynı ada sahip iki işleve sahip olmasına izin verir, ancak aslında diğerinden farklı bir argüman setine sahip olması nedeniyle farklı işlevlerdir. Aslında, Java öyle bir kürtajdır ki, üniversiteler Pascal sözdizimini öğretmekten bilgisayar dışı bilim dersleri alarak öğrencilere geçtiğinde, geçiş oranı yaklaşık% 70'ten% 40'a düştü.

Özet olarak, vaka duyarlılığı iki nedenden ötürü ortaya çıkmıştır. Biri bilgisayar gücü eksikliğiydi. İkincisi, bilgisayar bilimine giden yolu bulan insanların genellikle otistik spektrumda olduğu ve "normal" insanların ihtiyaçları ile iyi bir şekilde ilişkili olmadığıydı. Sonuç olarak, bu insanlar büyük / küçük harf duyarlılığının hem gereksiz hem de bir programlama dili öğrenmesi ve kullanması için bir engel olduğunu anlayamazlar.


1
Java bölümünü kaldırırım çünkü imho, görüş tabanlı ve noktanın yanı sıra (yöntem aşırı yüklemesi büyük / küçük harf duyarlılığı ile ilgisi yoktur) ... yöntem / işlev aşırı yüklemesi C ++ gibi diğer dillerde de bulunur ve pl / sql adında iki. Psikoloji paragrafınıza gelince, kaynakların iyi olacağını düşünüyorum ... Son olarak, son paragraf imho, fikir tabanlı ve saldırgan ve kaldırılmalıdır.
thecarpy

C'nin ve bundan çıkan tüm dillerin neden bilgisayar biliminin nedenine zarar verdiğini daha iyi anlamak için lütfen şu adrese gidin; Linkedin.com/pulse/… Bu sorunun özü ya da çekirdek :-) demeliyim ki, programcılar bilgi yaymakla ilgili değil, bir iş yapmakla ilgilenen bir kişilik tipindedir. Bu yazıda söylenenlere katılmıyorsanız, lütfen pozlarınızı doğrulamak için bir argüman öne sürün. Görüşler azdır.
Kevin Loughrey

Vaka duyarlılığının öğrenmeyi zorlaştırdığına katılıyorum. Ancak Unix'teki hemen hemen her şeyin küçük harf olduğunu unutmayın , bu yüzden bu şekilde saklayın. Bunun en büyük istisnası, çevre değişkenlerinin geleneksel olarak tüm başkentlerdir.
ctrl-alt-delor

Durum sürekli olarak ve bu cevapta belirtildiği gibi, ortam değişkeni ile normal kabuk değişkeni gibi ekstra bilgi iletmek için kullanılmalıdır .
ctrl-alt-delor

-3

Büyük / küçük harf duyarlılığı ortaya çıkan aptalca bir fikir çünkü Unix yazarları ASCII'nin büyük / küçük harfe duyarsız olacak şekilde tasarlandığını anlamadılar. Biri sadece önde gelen bitleri göz ardı eder. Ascii, 65 1000001 bit değerinde ve A bit ondalık 97 1100001 bitinde 7 bit kodlamasıdır. Harfler alfabetik olarak takip edilir. Bu, Terliklerin terliklerden farklı olmasını önlemek için anahtar değer çiftlerindeki tüm anahtarlar gibi her türlü fikirlerin sayısal olması gerekir. Pick Multi-Value veritabanı bunu en başından fark etti ve büyük / küçük harfe duyarlı değil.


2
"Aptal" fikriniz. Bu cevapta görebildiğim çok az gerçek var. Oh, ve neden kendinizi ASCII ile kısıtlıyorsunuz? EBCDIC de vardı.
roaima
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.