Saya memahami dan menerima premis bahwa scripting defensive 1 shell lebih bijaksana dan, dalam jangka panjang, lebih berkelanjutan.
Banyak jawaban untuk pertanyaan pemrosesan teks di sini mengikuti prinsip ini dengan membangun kemungkinan kontingensi untuk nama file yang tidak ortodoks; yang mungkin berisi spasi, tanda hubung dan garis baru.
Seberapa lazimkah baris baru dalam nama file? Secara khusus:
- Apakah ada aplikasi yang membuat nama file yang menyertakan baris baru secara default?
- Apakah ada situasi di mana diinginkan untuk membuat nama file seperti itu?
- Atau apakah mereka sebagian besar merupakan contoh kesalahan pengguna?
[1] Berarti merencanakan dan mengelola berbagai kemungkinan skenario dan kemungkinan ...
Pertanyaan yang diilhami oleh komentar (agak sedih) tentang pertanyaan ini .
shell-script
filenames
newlines
jasonwryan
sumber
sumber
Jawaban:
Saya belum pernah melihat nama file dengan baris baru selain yang sengaja dibuat untuk menguji aplikasi yang memanipulasi nama file. Nama file yang mengandung baris baru dapat muncul karena:
POSIX mendefinisikan nama file sebagai “nama yang terdiri dari 1 hingga {NAME_MAX} byte yang digunakan untuk menamai file. Karakter yang menyusun nama dapat dipilih dari himpunan semua nilai karakter tidak termasuk karakter slash dan byte nol. Nama file dot dan dot-dot memiliki arti khusus.”Tidak ada jaminan bahwa setiap filesystem akan menerima‘aneh’nama file (hanya dijamin karakter huruf ASCII, angka, periode, tanda hubung dan garis bawah , yaitu
A-Z
,a-z
,0-9
dan._-
, dengan tanda hubung dilarang di posisi pertama), tetapi kebanyakan filesystem asli pada unix modern melakukannya.sumber
spaces
dalam nama file tidak dijamin portabel? Akan sangat membantu jika Anda menjelaskan bahwa ketiga karakter terakhir adalahperiod, underscore, and hyphen
. Dengan tautan yang digarisbawahi, sulit untuk mengatakannya.,
(digunakan oleh RCS),:
(digunakan oleh X.org),~
(digunakan oleh banyak program pada file cadangan), ... Tetapi semuanya didukung oleh hampir semua sistem modern.Saat menulis makalah, saya sering mengumpulkan daftar pustaka file PDF dari berbagai sumber. Tidak semua ini mengandung metadata yang benar, yang berarti saya terkadang menyalin-menempelkan judul kertas dari penampil PDF ke nama file. Ini sering menghasilkan baris baru dalam nama file, tetapi tidak pernah menjadi masalah dengan alat apa pun yang saya gunakan.
IMHO tidak ada yang 'defensif' tentang pengkodean ke standar .. standar yang menyatakan bahwa baris baru diizinkan dalam nama file. Jika skrip Anda tidak menangani semua nama file yang diizinkan dalam standar, maka skrip Anda rusak.
sumber
Saya belum pernah melihat pengguna NORMAL menggunakan baris baru dalam nama file. Tampaknya tujuan utama mereka adalah (1) mempermudah penyerang menumbangkan sistem Anda, dan (2) mempersulit untuk menulis program yang aman :-(. Namun, Unix-like modern (seperti Linux) memungkinkan mereka , jadi Anda harus bersiap untuk mereka jika Anda menginginkan program yang tahan serangan.
"Nama file dan Nama Path di Shell: Cara melakukannya dengan benar" menunjukkan cara menangani ini dengan benar.
sumber