tailbox
— интересный виджет программы dialog
, позволяющий видеть дополнения в текстовом файле в реальном времени, что делает его удобным для отображения логов
Прямая ссылка: https://youtu.be/kdOjJFtbuI4
Если переданный программе лог не дополняется, то tailbox
просто отображает последние строки из файла (насколько хватает заданных размеров виджета)

Вызов виджета:
dialog --title "заголовок_окна" \ --exit-label "Надпись_на_кнопке_выхода" \ --tailbox "текстовый_файл" высота ширина
Например:
dialog --title "LOG" \ --exit-label "Close log window" \ --tailbox "/tmp/mylog.log" 24 70
Для демонстрации написал простой log viewer.
Использование:
logview путь_к_файлу
Вроде бы виджет простой, но при некоторой смекалке можно делать интересные вещи, например, вести лог сразу в трех местах — отображая его в --tailbox
‘е, одновременно отправляя изменения, происходящие в реальном времени на отдельный терминал, и сохраняя лог в файл (с перезаписью или дозаписью)
Прямая ссылка https://youtu.be/AARNx4SbYJg
Добиться этого можно, совместив dialog tailbox
с командой tee
(копия).
Написал демонстрационный скрипт:
Демонстрационный скрипт
В качестве источника логов, демо-скрипт вызывает в фоновом режиме другой скрипт tscript
, который выводит 10 случайных чисел на консоль и завершает работу:
#!/bin/bash SEC=1 CTR=10 echo "Test script, write to STDOUT random number after $SEC sec." while [ "$CTR" -ne 0 ];do let "CTR=CTR-1" printf '%x Number: %x\n' $CTR $RANDOM sleep $SEC done echo "Complete!"
Настройки скрипта для поиграться можно провести через внутренние переменные:
LOG_FILE="./test.log"
— если значение не задано, создается временный файл, который по завершению скрипта удаляется.
LOG_TTY="/dev/tty4"
— если значение не задано, лог в реалтайме не отправляется на дополнительный терминал
RMLOG=0
— 0
— по завершению скрипта лог не удаляется, 1
— удаляется.
LOG_APPEND=1
— 0
— при каждом запуске создается новый файл. 1
— добавление данных в лог, если он существует.
I want to pipe its output to to dialog. —tailbox and —progressbox handle this well, except that if the output becomes too much, you can only see as much as the screen fits.
I have not encountered such a problem. Show an example of your code (script), maybe I can help you figure out the problem.