Output dari ls
(tanpa argumen) muncul untuk memisahkan nama file dengan linebreak.
Bukti:
ls | grep foo
berfungsi seperti yang diharapkan, dengangrep
memperlakukan 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 ls
menempatkan 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?
ls
digunakan untuk menentukan apakah output terminal atau tidakisatty(3)
.tty -s
dan memeriksa status pengembaliannya.ls
mendeteksinya ketika Anda menyalurkan outputnya. Anda dapat melihatnya di dokumentasi:Jika Anda ingin setiap file dalam output ditempatkan pada baris terpisah terlepas dari pengalihan pipa, Anda dapat menggunakan
sumber