Как заставить bash IFS подобрать последний файл в списке без новой строки
По этой ссылке автор обсуждает зацикливание для чтения файлов из списка.
#!/bin/bash
while IFS= read -r file
do
[ -f "$file" ] && rm -f "$file"
done < "/tmp/data.txt"
Проблема в том, что исходный файл, кажется, требует новой строки после последней строки, которую он читает.
/tmp/data.txtfile1.txt
file2.txt
file3.txt // <- if there is no newline, this file will not be read
Если после последнего файла новой строки не существует, он не будет прочитан.
/tmp/data.txtfile1.txt
file2.txt
file3.txt
// <- this newline, now makes file3.txt able to be read
Есть ли способ, чтобы чисто переписать код, чтобы забрать последнюю строку file3.txt
независимо от того, следует ли за ним перевод строки?
Редактировать:
Ответ, указанный в комментарии, решает проблему. добавленной || [ -n "$file" ];
к while
заявление. Код выглядит следующим образом.
#!/bin/bash
while IFS= read -r file || [ -n "$file" ];
do
[ -f "$file" ] && rm -f "$file"
done < "/tmp/data.txt"