LS çıktısında dosya adları arasındaki sihirli ayırıcı nedir?


20

(Bağımsız lsdeğişkenler olmadan) çıktısı satır adlarıyla dosya adlarını ayırıyor gibi görünüyor.

Kanıt:

  • ls | grep foobeklendiği gibi çalışır ve grepher bir dosya adına ayrı bir girdi satırı muamelesi yapar.

  • ls > files.txt; vim files.txt -> Vim'de her dosya ayrı bir satırda

Ve yine de terminalde, çıktıyı lsgüzel bir şekilde hizalanmış sütunlar yapmak için dosya adlarını boşluklarla ayırarak bir satıra birden fazla dosya koyar:

$ ls
a.txt  b.txt  c.txt

Benim sorum şu, bunu nasıl yapıyor?

Bir satırsonu 'sahte' yapmak için bazı özel kontrol karakterleri kullanıyor mu? Yoksa çıkışının ne zaman başka bir komuta aktarıldığını biliyor ve çıkışını bu durumda farklı biçimlendiriyor mu?

Yanıtlar:


24

Yoksa çıkışının ne zaman başka bir komuta aktarıldığını biliyor ve çıkışını bu durumda farklı biçimlendiriyor mu?

Evet. Tam kılavuzdan ( info lsdokümantasyon yüklüyse kullanılabilir):

Standart çıktı bir terminal ise, çıktı sütunlar halinde (dikey olarak sıralanır) ve kontrol karakterleri soru işareti olarak çıkarılır; aksi takdirde, çıktı her satıra bir tane olarak listelenir ve kontrol karakterleri olduğu gibi verilir.

Bir sütun çıktısını beğendiyseniz,

ls -1

terminalde de almak için.


7
Özellikle, fonksiyon ls, çıkışın bir terminal olup olmadığını belirlemek için kullanır isatty(3).
Blrfl

Ayrıca, biraz basit bir kabuk betiğinde bunu test etmek istiyorsa, koşup tty -sdönüş durumunu kontrol edebilir .
Daniel Andersson

10

lsçıkışını bağladığınızda algılar. Belgelerde görebilirsiniz:

Standart çıktı bir terminal ise, çıktı sütunlar halinde (dikey olarak sıralanır) ve kontrol karakterleri soru işareti olarak çıkarılır; aksi takdirde, çıktı her satıra bir tane olarak listelenir ve kontrol karakterleri olduğu gibi verilir.

Çıktıdaki her dosyanın, boru yönlendirmesine bakılmaksızın ayrı bir satıra yerleştirilmesini istiyorsanız,

ls -1
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.