Хорошо, всего переписать.
while read line
do case "$line" in
*string*) echo "$line"
break ;;
esac
done < <( tail -99999f testfile ) >> holder
tail
контролирует скорость подачи. Требуется несколько строк, если в файле есть какие-либо данные, которые вы хотите проверить, когда начинается цикл; число, которое я использовал, является произвольным. -f
будет следовать за концом файла, передавая новые данные по мере его поступления.
read
не самая эффективная из возможных систем, но здесь она помогает с проблемами буферизации, поэтому я думаю, что это уместно.
case
- это простое сравнение строк, которое заменяет grep
, не вызывая процесс в каждой строке. Это должно быть довольно эффективно и не требует таких регуляторов, как sleep
- оно будет соответствовать tail
настолько хорошо, насколько это возможно, а затем будет выполнено за один проход.
... хотя он и работает tail
. Я ожидал, что это закроется, когда никто не читал трубку. Хм ...