Neden Shell yerleşikleri büyük harflerle çalıştırılamaz, ancak diğer komutlar olabilir?


33

Bu neden?

Bunu yaptığımda

CD ~/Desktop

Beni masaüstüne götürmüyor. Ama bu:

echo "foo
bar" | GREP bar

bana verir:

bar

4
Bir şey olup olmadığını kontrol edin alias GREPveya which GREPçıkarın.
chepner

1
İşte gidiyorsun. Sen adında bir komut var GREPayrıdır, grep. (Doğru, sadece sert bir bağlantı veya sembolik bir bağlantı olabilir /usr/bin/grep, ancak kabuğun bakış açısından ayrı bir komuttur.)
chepner

12
Bekle: Mac OS X'desin, değil mi? HFS + varsayılan olarak büyük / küçük harf korumalıdır, yani bir dosya oluşturduğunuzda durum önemlidir , ancak dosya bir kez bulunduğunda, aramalar büyük / küçük harf duyarlı değildir. Yani, bashadında bir dosya isteyebilir GREP, ancak dosya sistemi grepbir eşleşme olarak değerlendirir.
chepner

1
Evet, çünkü bu Unix.
DisplayName

4
Dosya sistemleri işletim sisteminden bağımsızdır. Mac OS X ile diğer dosya sistemlerini kullanabilir ve (teoride) HFS + 'yı diğer işletim sistemlerinde kullanabilirsiniz. Ayrıca, HFS + büyük / küçük harf duyarlı yapabilirsiniz; vaka koruma davranışı tarihsel nedenlerden ötürü sadece varsayılandır.
chepner

Yanıtlar:


71

Diğer sorularınızdan OS X kullanıyorsunuz. OS X'teki varsayılan HFS + dosya sistemi büyük / küçük harf duyarlı değildir: aynı dizinde "abc" ve "ABC" adlı iki dosyaya erişemez ve erişmeye çalışamazsınız. her iki isim de aynı dosyaya ulaşacaktır. Aynı şey Cygwin altında veya büyük / küçük harf duyarlı dosya sistemlerinde (FAT32 veya ciopfs gibi ) olabilir.

grepGerçek bir çalıştırılabilir olduğundan , dosya sistemine (dizinlerinde PATH) baktı . Kabuğunuzun /usr/binher ikisini de aradığında grepveyaGREPgrep çalıştırılabilir dosyayı bulacaktır .

Kabuk yerleşikleri dosya sisteminde aranmaz : yerleşik oldukları için, kabuğun kendi içinde (büyük / küçük harfe duyarlı) dize karşılaştırmaları yoluyla erişilir.

Karşılaştığınız şey ilginç bir durum. cdBir yerleşik olmasına rağmen , büyük küçük harf duyarlı erişimli, CDçalıştırılabilir olarak bulunur /usr/bin/cd. cdYürütülebilir oldukça işe yaramaz çünkü: cdGeçerli kabuk yürütme ortamı etkiler, her zaman bir kabuk olarak verilmiştir düzenli yerleşik ama orada cdyürütülebilir POSIX aşkına kendisi için dizini değiştirir ve daha sonra hemen sonlandırır neyse, çevredeki kabuk bırakarak başladığı yer.

Bunları typeyerleşik olarak deneyebilirsiniz :

$ type cd
cd is a shell builtin
$ type CD
CD is /usr/bin/CD

typeBu komutu çalıştırdığınızda kabuğun ne yapacağını söyler. Çalıştırdığınızda cdyerleşik yapıya erişirsiniz, ancak CDçalıştırılabilir dosyayı bulur. Diğer yerleşikler için yerleşik ve yürütülebilir dosya makul derecede uyumlu olacaktır (deneyin echo), ancak cdbu mümkün değildir.


1
iyi cevap. Aynı etkiyi yaratacak cygwin demek üzereydim.
Joshua,

@Joshua OP'nin sorunu çözüldü, ancak bence soruyu daha fazla okuyanlar için cygwin tabanlı bir cevap en azından mevcut cevap kadar yararlı olacaktır; Belki de kısa olsa ve ayrıntılar için mevcut olana ertelediyseniz, bunu ayrı bir cevap haline getirebilirsiniz.
Volker Siegel

1
Posix neden cd gibi işe yaramaz bir komut gerektiriyor ve osx'un dahili cd'si neden geçerli değil?
John

2
51 oy! Yorum yerine bir cevap göndermeliydim :)
chepner

1
/ usr / bin / cd'nin bir amacı vardır. Sözdizimi / usr / bin / cd dizin programı argümanlarıdır
Joshua
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.