GNU watch без стирания предыдущих выходных данных

GNU watch без стирания предыдущих выходных данных

гнуwatchочень полезный инструмент для проверки выходных данных программы: он запускает программу и каждые 2 секунды отображает выходные данные на весь экран.

Иногда я не хочу, чтобы предыдущий вывод был стерт, а чтобы он был напечатан построчно с отметкой времени. Для этого я использую скрипты bash, например:

while true; 
    do echo -n "`date`   "; 
    ssh ubuntu@server -o ConnectTimeout=1 "uptime" ; 
    sleep 1; 
done

Есть лиwatch-подобный инструмент, который может выполнить команду и отобразить ее вывод с меткой времени в строке, не стирая предыдущий вывод?

решение1

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

Напишите функцию, которая справится с этим за вас.

function uberwatch {
    # call: uberwatch <interval> <command>
    while true; do
        "${@:2}";
        sleep $1;
    done
}

Вы можете разместить это где-нибудь около вашего ~/.bashrc.

Запишите вывод в файл, но продолжайте просмотр с помощьюwatch

watch "command | tee -a watchlog.log"

Вы по-прежнему будете видеть только последний прогон, но при необходимости сможете просмотреть исторический журнал.

решение2

while true; do date >> /vat/tmp/watch.log; sleep 600; ls -l filename >> /var/tmp/watch.log; done

Мне нравится цикл while, упомянутый Артемом выше, но я хотел сохранить данные в файле, чтобы иметь возможность проанализировать их, когда вернусь, поэтому добавил перенаправления в файл. В моем случае просмотр файла каждые 10 минут и ls -l для размера файла

-Джей

решение3

Мне нравится Олимодифицированное watchрешение, но мне нравится идея просмотра журнала в реальном времени, а не поискать в нем информацию позже.

Вот идея:

watch 'echo $(date && command 2>&1 | tail -n 1) >> watchlog.log && cat watchlog.log | tail'

Объяснение:

  • echoизбегает новой строки между dateи command.
  • >>добавляет к файлу то же самое, | tee -aно без дублирования watchвывода.
  • 2>&1объединяет stderr со stdout, чтобы убедиться, что вы видите все, включая ошибки.
  • | tail -n 1ограничивает вывод последней строкой (содержащей вывод date) для более чистого просмотра в реальном времени. Это может быть или не быть вашим желанием относительно содержимого файла журнала.

Связанный контент