Makinelerimden birinde (Debian Sid çalıştıran) lsboşluk içeren herhangi bir dosya adı yazdığımda onu çevreleyen tek tırnak işaretleri olduğunu fark ettim.
Hemen takma adlarımı kontrol ettim, sadece onları eksiksiz bulmak için.
wyatt@debian630:~/testdir$ ls
'test 1.txt' test1.txt
wyatt@debian630:~/testdir$ alias
alias ls='ls --color=auto'
alias wget='wget --content-disposition'
wyatt@debian630:~/testdir$
Adlarında tek tırnak içeren dosyalar içeren başka bir test (ayrıca jimmij'in isteğini yanıtlayan):
wyatt@debian630:~/testdir$ ls
'test 1.txt' test1.txt 'thishasasinglequotehere'\''.txt'
wyatt@debian630:~/testdir$ touch "'test 1.txt'"
wyatt@debian630:~/testdir$ ls
''\''test 1.txt'\''' test1.txt
'test 1.txt' 'thishasasinglequotehere'\''.txt'
Yeni coreutils-8.26 çıkışı ile güncelleme (kuşkusuz daha az kafa karıştırıcı, ancak yine de varsayılan olarak tahriş edici). Bu çıktı için Pádraig Brady'e teşekkürler:
$ ls
"'test 1.txt'" test1.txt
'test 1.txt' "thishasasinglequotehere'.txt"
$ ls -N
'test 1.txt' test1.txt
test 1.txt thishasasinglequotehere'.txt
Bu neden oluyor? Doğru şekilde nasıl durdurabilirim?
açıklığa kavuşturmak için kendimi otomatik olarak renk çıktısına ayarlıyorum. Daha önce hiçbir şeyden alıntı yapmazdı.
Koşuyorum bashve 8.25 coreutils.
EDIT: Çekirdekciler geliştiricilerin (link) , 46+ yıllık UNIX geleneğinin yanı sıra en az şaşkınlık ilkesini çiğnemesine rağmen küresel bir varsayılan yapmanın iyi bir fikir olacağını düşündü .
Bir derleme olmadan bunu düzeltmenin bir yolu var mı?
GÜNCELLEME - Ekim 2017 - Debian Sid, varsayılan olarak kabuk çıkış teklifini yeniden etkinleştirdi. Bu sadece saçmalık oluyor. https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=877582
Ve önceki hata raporuna verilen yanıt zincirinin altında, "değişiklik kasıtlı olarak kalacaktır." https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=813164#226
Bunun çözüldüğünü sanıyordum. Görünüşe göre öyle değil.
GÜNCELLEME: Nisan 2019: PHP'de bu değişikliğin neden olduğu çok büyük bir hata raporu buldum ls. Geliştiricilerin kafasını karıştırırken ve yanlış hata raporları oluştururken, değişikliklerinizi yeniden düşünmenin zamanı geldi.
Güncelleme: Android oyuncak kutusu lsşimdi buna benzer bir şey yapıyor, ancak tırnak işaretleri yerine ters eğik çizgi yapıyor. -Q seçeneğinin kullanılması, boşlukların 'soru işareti karakterleri' olarak oluşturulmasını sağlar (ne olduklarını kontrol etmedim, çünkü açıkça boşluk değiller), bu nedenle söz konusu cihazı kök salmadan bugüne kadar bulduğum tek düzeltme eklemek Bu bir komut dosyası ve bir kabuk başlatırken onu kaynak. Bu işlev lsbir terminalde sütunlar kullanır ve satır başına bir tane basarsa, aynı zamanda lsbir borudan geçtiği için sözlü basım alanlarını kandırır .
ls() {
# only way I can stop ls from escaping with backslashes
if [ -t 1 ]; then
/system/bin/ls -C "$@" |cat
else
/system/bin/ls "$@" |cat
fi
}
ls | catgitmediğine bakmaya çalış. Eğer bir zaman makinem olsaydı, 1970'lerde Bell Laboratuarlarına geri dönerdim ve Ken Thompson'ı dosya ve dizin adlarında boşluk bırakmanın kötü bir fikir olduğuna ikna etmeye çalışırdım. :-P
'*'. Sanırım lsondan kurtulmak için tüm makinelerime takma ad eklemeye devam edeceğim ...
QUOTING_STYLE=literalbir takma ad yerine bir ortam değişkeni ile yapabilirsiniz . (Sanırım bir zevk meselesi ama değişkeni tercih ediyorum.)
lsemri ayrıştırmamak .