Tarafından tanımı , bir metin dosyası satır bir dizisinden oluşur. Bir satır , yeni satır karakteri ile biter. Bu nedenle, bir metin dosyası boş değilse yeni satır karakteri ile biter.
read
Builtin yalnızca metin dosyalarını okumak içindir. Bir metin dosyasını geçirmiyorsunuz, bu yüzden sorunsuz bir şekilde çalışmasını umut edemezsiniz. Kabuk tüm satırları okur - atladığı şey son satırdan sonraki ekstra karakterlerdir.
Son satırında eksik olabilecek potansiyel olarak hatalı biçimlendirilmiş bir giriş dosyanız varsa, emin olmak için bir satırsonu ekleyebilirsiniz.
{ cat "/tmp/urlFile"; echo; } | …
Metin dosyaları olması gereken ancak son satırsonu eksik olan dosyalar genellikle Windows editörleri tarafından üretilir. Bu genellikle Unix'in LF'sinin aksine CR LF olan Windows satır sonlarıyla birlikte gider. CR karakterleri nadiren hiçbir yerde kullanışlıdır ve her durumda URL'lerde görünemez, bu yüzden bunları kaldırmalısınız.
{ <"/tmp/urlFile" tr -d '\r'; echo; } | …
Giriş dosyasının iyi biçimlendirilmesi ve bir satırsonu ile bitmesi durumunda, echo
fazladan bir boş satır ekler. URL'ler boş olamayacağından, boş satırları yok saymanız yeterlidir.
Ayrıca read
satırları basit bir şekilde okumaz. Bir URL için muhtemelen istenen önde gelen ve sondaki boşlukları yok sayar. Bir çizginin sonundaki ters eğik çizgiyi bir kaçış karakteri olarak ele alır ve bir sonraki çizginin ilk eksi ters eğik çizgi yeni dizisi ile birleştirilmesine neden olur, bu kesinlikle arzu edilmez. Bu nedenle -r
seçeneği geçmelisiniz read
. read
Doğru şey olmak çok ama çok nadirdir read -r
.
{ <"/tmp/urlFile" tr -d '\r'; echo; } | while read -r url
do
if [ -z "$url" ]; then continue; fi
…
done