GNU/Linux >> Belajar Linux >  >> Linux

Mengapa *tidak* Mengurai `ls` (dan Apa yang Harus Dilakukan)?

Saya secara konsisten melihat jawaban yang mengutip tautan ini yang menyatakan secara pasti “Jangan menguraikan ls !” Ini mengganggu saya karena beberapa alasan:

  1. Tampaknya informasi dalam tautan itu telah diterima secara grosir dengan sedikit pertanyaan, meskipun saya dapat menemukan setidaknya beberapa kesalahan dalam membaca biasa.

  2. Tampaknya juga masalah yang disebutkan dalam tautan itu tidak memicu keinginan untuk menemukan solusi.

Dari paragraf pertama:

…ketika Anda bertanya [ls] untuk daftar
file, ada masalah besar:Unix mengizinkan hampir semua karakter dalam
nama file, termasuk spasi, baris baru, koma, simbol pipa, dan
hampir semua hal lain yang Anda inginkan pernah mencoba menggunakan sebagai pembatas kecuali
NUL. … ls memisahkan nama file dengan baris baru. Ini baik-baik saja
sampai Anda memiliki file dengan baris baru dalam namanya. Dan karena saya tidak
mengetahui implementasi ls yang memungkinkan Anda untuk menghentikan
nama file dengan karakter NUL alih-alih baris baru, ini membuat kami
tidak dapat memperoleh daftar nama file dengan aman dengan ls .

Menyedihkan, kan? Bagaimana pernah dapatkah kami menangani kumpulan data terdaftar yang dihentikan baris baru untuk data yang mungkin berisi baris baru? Nah, jika orang yang menjawab pertanyaan di situs web ini tidak melakukan hal semacam ini setiap hari, saya mungkin berpikir kita dalam masalah.

Faktanya, sebagian besar ls implementasi sebenarnya menyediakan api yang sangat sederhana untuk menguraikan output mereka dan kita semua telah melakukannya selama ini tanpa menyadarinya. Anda tidak hanya dapat mengakhiri nama file dengan null, Anda juga dapat memulainya dengan null atau dengan string arbitrer lainnya yang mungkin Anda inginkan. Terlebih lagi, Anda dapat menetapkan string arbitrer ini per jenis file . Harap pertimbangkan:

LS_COLORS='lc=
Linux
  1. Apa itu server Linux dan mengapa bisnis Anda membutuhkannya?

  2. Apa itu TAM dan mengapa Anda ingin menjadi TAM?

  3. Cara:Apa itu Git dan Github? Bagaimana cara menggunakannya dan mengapa saya harus peduli?

  1. Apa Env X=() { :;}; Command' Bash Do Dan Mengapa Tidak Aman?

  2. Mengapa Deis dan apa itu?

  3. Mengapa eval harus dihindari di Bash, dan apa yang harus saya gunakan?

  1. apa daemon dbus dan mengapa vlc membutuhkannya

  2. Apa itu GPU Matrox dan mengapa server UNIX universitas saya memilikinya?

  3. Apa yang dilakukan 'set -e', dan mengapa dianggap berbahaya?