Menurut definisi , file teks terdiri dari urutan garis. Sebuah garis diakhiri dengan karakter baris baru. Dengan demikian file teks berakhir dengan karakter baris baru, kecuali jika kosong.
The read
builtin hanya dimaksudkan untuk membaca file teks. Anda tidak melewatkan file teks, jadi Anda tidak bisa berharap itu berfungsi dengan mulus. Shell membaca semua baris - apa yang dilompati adalah karakter tambahan setelah baris terakhir.
Jika Anda memiliki file input yang berpotensi cacat yang mungkin hilang pada baris terakhir, Anda dapat menambahkan baris baru untuknya, hanya untuk memastikan.
{ cat "/tmp/urlFile"; echo; } | …
File yang seharusnya berupa file teks tetapi tidak ada baris terakhir akhir sering diproduksi oleh editor Windows. Ini biasanya berjalan dalam kombinasi dengan ujung garis Windows, yang CR LF, yang bertentangan dengan LF Unix. Karakter CR jarang berguna di mana saja, dan tidak dapat muncul dalam URL dalam hal apa pun, jadi Anda harus menghapusnya.
{ <"/tmp/urlFile" tr -d '\r'; echo; } | …
Jika file input terbentuk dengan baik dan diakhiri dengan baris baru, baris echo
tambahan kosong ditambahkan. Karena URL tidak boleh kosong, abaikan saja baris kosong.
Perhatikan juga bahwa read
tidak membaca garis secara langsung. Itu mengabaikan spasi putih terkemuka, dan yang untuk URL mungkin diinginkan. Ini memperlakukan backslash pada akhir baris sebagai karakter pelarian, menyebabkan baris berikutnya bergabung dengan yang pertama minus urutan backslash-newline, yang jelas tidak diinginkan. Jadi, Anda harus meneruskan -r
opsi ke read
. Sangat, sangat jarang untuk read
menjadi hal yang benar daripada read -r
.
{ <"/tmp/urlFile" tr -d '\r'; echo; } | while read -r url
do
if [ -z "$url" ]; then continue; fi
…
done