Bence bash, aksanlı karakterlerin nasıl ele alındığına dair bazı anormalliklerin üzerinden geçiyor. Biraz patlamış mısır almak isteyebilirsiniz, çünkü bu biraz teknik olacak ...
Unicode, bazı aksanlı karakterlerin birkaç farklı şekilde temsil edilmesine izin verir: aksanlı karakteri temsil eden bir "kod noktası" olarak veya karakterin aksanlı olmayan sürümünü temsil eden bir dizi kod noktası, ardından aksan (lar). Örneğin, "ä", önceden U + 00E4 (UTF-8 0xc3a4, Latin alfabesinde küçük harf 1 ile diyaerez) veya U + 0061 U + 0308 (UTF-8 0x61cc88, Latin alfabesinde küçük harf + ).
OS X'in HFS + dosya sistemi, tüm dosya adlarının tamamen ayrıştırılmış formlarının UTF-8 temsilinde depolanmasını gerektirir . HFS + dosya adında "ä" 0x61cc88 olarak kodlanmalı ve "ö" 0x6fcc88 olarak kodlanmalı ZORUNLU.
Burada ne olduğuna eminim komut satırına "Näyttökuva.png" yazdığınızda, karakterleri önceden oluşturulmuş biçimde "yazıyor". Dosya oluşturulduğunda, dosya sistemi karakterlerin saklanması için ayrıştırılmasını sağlar. Şimdiye kadar her şey yolunda. Ancak "Nä" ile başlayan sekme tamamlamayı kullanmaya çalıştığınızda, bash'ın eşleşmeleri aramadan önce "ä" yi parçalayamadığını ve tabii ki hiçbirini bulamadığını düşünüyorum.
Farkı göstermek için, komut satırına sadece "Näyttökuva.png" yazdığımda hangi kodlamanın kullanıldığına ilişkin bir örnek, bir dosya adı olarak sakladığımda ve doldurmak için sekme tamamlamayı kullandığımda kullanılana karşılık:
$ printf Näyttökuva.png | xxd # This time I pasted the it in from this web page
0000000: 4ec3 a479 7474 c3b6 6b75 7661 2e70 6e67 N..ytt..kuva.png
$ touch Näyttökuva.png # Also pasted from the web
$ printf Näyttökuva.png | xxd # This time I tab-completed it after N
0000000: 4e61 cc88 7974 746f cc88 6b75 7661 2e70 Na..ytto..kuva.p
0000010: 6e67 ng
Şimdi, silme ve yeniden sekme tamamlama sırasında karakterlerin kaybolması konusuna gelince, bunun yakından ilişkili olduğundan şüpheleniyorum. Özellikle, bash'ın sil tuşuna her basışta bir kod noktasını "sildiğini", ancak her basışta Terminal penceresinden bir karakteri sildiğini düşünüyorum. Silinen karakterlerden biri (bu sefer "ö") iki kod noktasından oluştuğu, ancak yalnızca bir karakter içerdiği için, Terminal ekranı senkronize olmaz. Tüm dosya adını sekmeyi tamamlamayı, "Näytt" a geri silmeyi ve ardından yeniden sekme işlemini tamamlamayı deneyin: bash "ö" ifadesinin tamamını değil, yalnızca birleştirici diyabetin silindiğini düşünüyor. , ancak bu sefer "t" ye bağlanır:
$ echo Näytẗkuva.png
Näyttökuva.png
Return tuşuna bastığımda, bash dosya adının aslında orada olduğunu; karıştırılan sadece Terminal ekranı.
TL; DR bash, ayrıştırılabilir aksanlı karakterleri işleyen bazı hatalara sahiptir.
EDIT: bazı mulling sonra, tek tam çözüm bash düzeltmek olduğunu düşünüyorum (/ geliştiricileri düzeltmek için bekleyin). Ayrıştırılmış biçimde karakterler girmenin bir yolu da olabilir, ancak bunun ne olacağı hakkında hiçbir fikrim yok. Ancak bazı kısmi çözümler buldum:
Finder macunlarındaki bir dosyayı doğru biçimde sürükleyip bırakın. Finder dosya adını dosya sisteminden aldığından zaten ayrıştırılmıştır, bu yüzden çalışır.
Aksanlı karakterin kendisini sekmeli olarak tamamlayabilirsiniz. Örneğin, "Na" ve sonra sekmesini yazarsanız, "Näyttökuva.png" ile eşleşir, çünkü "ä" kurallı ayrışması "a" ile başlar. Ancak aynı dizinde "Narwal.gif" adında bir dosyanız varsa, bu çok yardımcı olmaz ...
Bunu test etmedim, ancak sekmeyi tam yerine menü tamamına bağlarsanız , bir sonraki harfi yazamasanız bile istediğinizi seçebilmeniz için olası eşleşmeler arasında geçiş yapmanıza izin vermelidir. (Ya da farklı bir tuşa bağlayabilirsiniz, böylece sadece ihtiyacınız olduğunda kullanabilirsiniz.)
Terminal ekranının senkronizasyondan çıkmasıyla ilgili sorunu gidermek için, yeniden çizilen akım hattına bir şey bağlayabilirsiniz - sorunun oluşmasını engellemez, ancak ekranı yeniden senkronize etmenin bir yolunu verir.
$ echo -e "N\xC3\xA4*" | ls
(yankı verirNä*
)Näyttökuva.png
. Sorun, Mac OS'deki diğer kabuklarda da var; ve örneğin zshls N
ile otomatik olarak tamamlanırls Na<0308>ytto<0308>kuva.png