Saya pikir saya mungkin mengabaikan poin yang relatif mendasar tentang shell. Output dari perintah ls secara default memisahkan output dengan baris baru, tetapi shell menampilkan output pada satu baris.
Adakah yang bisa menjelaskan hal ini kepada saya? Saya selalu berasumsi bahwa output hanya dipisahkan oleh spasi, tetapi sekarang saya melihat output dipisahkan oleh baris baru, saya berharap output akan ditampilkan pada baris yang berbeda.
Contoh:
cpoweradm@debian:~/lpi103-4$ ls text*
text1 text2 text3
od menunjukkan bahwa output dipisahkan oleh baris baru:
cpoweradm@debian:~/lpi103-4$ ls text* | od -c
0000000 t e x t 1 \n t e x t 2 \n t e x t
0000020 3 \n
0000022
Jika ada baris baru, maka mengapa output tidak ditampilkan sebagai:
text1
text2
text3
ls
. Ini berguna, tetapi jelas tidak konsisten dan mengejutkan. Tetapi perhatikan bahwa beberapa perintah yang menghasilkan keluaran berwarna akan menghapus warna saat disalurkan juga.ls
selalu cetak satu per baris, danlc
selalu cetak dalam kolom.dpkg -l
akan menggunakan seluruh lebar layar, tetapi jika itu mencetak ke pipa, ia menganggap terminal memiliki lebar 80 kolom , dan menyingkat output agar pas jika perlu.Penemuan Anda menyoroti alasan utama mengapa mengurai output
ls
selalu merupakan ide yang buruk. Lihat wiki Greg untuk penjelasan lengkap .Pikirkan masalah Anda secara terbalik. Anda perhatikan bahwa kadang-kadang memang dan kadang-kadang tidak mencetak baris baru di antara output itu. Untuk digunakan dalam skrip atau ketika dipaksa oleh
-1
bendera, itu berlaku. Satu baris baru di akhir setiap file. Apa yang tidak ada jaminan bahwa setiap baris baru mewakili nama file baru . Bahkan, jika nama file mengandung baris baru itu sendiri, output dari ls akan absolut dan tidak dapat diuraikan. Pertimbangkan nama file ini:Ketika Anda
ls -1
direktori dengan itu di dalamnya, Anda akan mendapatkan sesuatu yang tampak seperti ini:Tidakkah Anda secara alami mengasumsikan ada empat file? Begitu juga skrip yang mem-parsing keluaran ls. Pada kenyataannya ada tiga file, salah satunya dengan nama yang rumit, tetapi Anda tidak akan dapat menemukan itu dari output ls. *
* Kecuali jika Anda menggunakan
-l
bendera dan melihat hasilnya borked, tetapi skrip Anda masih akan tersedak.sumber
ls
,-b
opsi dapat membantu. Ini mengubah baris baru menjadi\n
, dll.