Apa pemisah ajaib antara nama file dalam output ls?


20

Output dari ls(tanpa argumen) muncul untuk memisahkan nama file dengan linebreak.

Bukti:

  • ls | grep fooberfungsi seperti yang diharapkan, dengan grepmemperlakukan setiap nama file sebagai jalur input yang terpisah.

  • ls > files.txt; vim files.txt -> di Vim, setiap file berada di baris yang terpisah

Namun di terminal output lsmenempatkan banyak file pada satu baris, memisahkan nama file dengan spasi untuk membuat kolom yang sejajar dengan baik:

$ ls
a.txt  b.txt  c.txt

Jadi pertanyaan saya adalah, bagaimana saya melakukan ini?

Apakah itu menggunakan beberapa kontrol khusus char untuk 'memalsukan' baris baru? Atau apakah ia tahu kapan outputnya sedang disalurkan ke perintah lain, dan format outputnya berbeda dalam kasus ini?

Jawaban:


24

Atau apakah ia tahu kapan outputnya sedang disalurkan ke perintah lain, dan format outputnya berbeda dalam kasus ini?

Iya. Dari manual lengkap (tersedia hingga info lsdokumentasi terinstal):

Jika output standar adalah terminal, output dalam kolom (diurutkan secara vertikal) dan karakter kontrol adalah output sebagai tanda tanya; jika tidak, output terdaftar satu per baris dan karakter kontrol adalah output apa adanya.

Jika Anda menyukai output satu kolom, Anda dapat menjalankan

ls -1

untuk mendapatkannya di terminal juga.


7
Secara khusus, fungsi lsdigunakan untuk menentukan apakah output terminal atau tidak isatty(3).
Blrfl

Juga agak terkait, jika seseorang ingin menguji ini dalam skrip shell sederhana seseorang dapat menjalankan tty -sdan memeriksa status pengembaliannya.
Daniel Andersson

10

lsmendeteksinya ketika Anda menyalurkan outputnya. Anda dapat melihatnya di dokumentasi:

Jika output standar adalah terminal, output dalam kolom (diurutkan secara vertikal) dan karakter kontrol adalah output sebagai tanda tanya; jika tidak, output terdaftar satu per baris dan karakter kontrol adalah output apa adanya.

Jika Anda ingin setiap file dalam output ditempatkan pada baris terpisah terlepas dari pengalihan pipa, Anda dapat menggunakan

ls -1
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.