Makinelerimden birinde (Debian Sid çalıştıran) ls
boş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 bash
ve 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 ls
bir terminalde sütunlar kullanır ve satır başına bir tane basarsa, aynı zamanda ls
bir 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 | cat
gitmediğ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 ls
ondan kurtulmak için tüm makinelerime takma ad eklemeye devam edeceğim ...
QUOTING_STYLE=literal
bir takma ad yerine bir ortam değişkeni ile yapabilirsiniz . (Sanırım bir zevk meselesi ama değişkeni tercih ediyorum.)
ls
emri ayrıştırmamak .