2013-12-18 3 views
0

Моя программа принимает текстовый файл вместо stdout в качестве своего вывода. Он постоянно добавляет новые строки в файл. Я могу привязывать файл каждый раз, когда хочу получить последние строки содержимого. Но теперь я хочу, чтобы добавленный контент отображался на моем терминале одновременно, как будто моя программа принимала stdout в качестве своего вывода.Как распечатать последнее добавленное содержимое текстового файла?

Я узнал некрасивое решение: напечатать новое прилагаемое содержание каждые пять секунд на резервное копирование содержимого текстового файла на пять секунд раньше и дифф текущего содержимого с ним, как ниже:

#!/bin/sh 
# show the appended text of a file every 5 seconds 
echo `pwd`; 
while true 
do 
    cp $1 $1.earlier; 
    sleep 5; 
    echo `date`; 
    diff $1 $1.earlier; 
done 
+1

Как насчет использования хвоста -f? –

+0

О, МОЙ !!! Я никогда не знал, что у хвоста есть опция -f! Спасибо, Рубенс, за помощь в форматировании кода. Спасибо, Том Рон, за то, что я сказал правильный ответ так быстро! –

ответ

1

Я думаю, что вы хотите:

$ tail -f file 

От man tail:

-f, --follow[={name|descriptor}] 

output appended data as the file grows; -f, --follow, and --follow=descriptor 
are equivalent 
0

Если вы хотите больше, чем за последние несколько строк вывода, а также следующие, вы можете вызвать:

less +F $file 

(или нажмите Shift-F во время просмотра файла в less).

Следуя за меньшим файлом, нажмите Ctrl-C, чтобы остановить следующее, но сохраните файл открытым, а затем Shift-F, чтобы продолжить.

Смежные вопросы