Linux dialog —tailbox

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 путь_к_файлу

logview

Скрипт на GitHub

Отправка лога одновременно на дополнительный терминал, в файл и отображение в tailbox’е

Вроде бы виджет простой, но при некоторой смекалке можно делать интересные вещи, например, вести лог сразу в трех местах — отображая его в --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=00 — по завершению скрипта лог не удаляется, 1 — удаляется.
LOG_APPEND=10 — при каждом запуске создается новый файл. 1 — добавление данных в лог, если он существует.

Скрипты на GitHub

2 Responses to Linux dialog —tailbox

  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.

Добавить комментарий для Милана Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *