Цикл bash с меньшим GNU, который обновляется каждые 2 минуты
У меня есть машина linux с папкой данных и сценарий, который создает файл электронной таблицы xlsx отчета о постоянно меняющемся содержимом папки, в которой он запускается. Я использую сценарий xlsx2tsv, чтобы преобразовать его в текст TSV, который занимает менее одной секунды. Сценарий занимает около 1 минуты для создания файла электронной таблицы, и я хочу, чтобы экран терминала отображал результаты таблицы в буфере GNU меньше, где я мог бы перемещаться с помощью курсоров и искать контент с помощью /search
и т. д. самой современной версии контента.
На данный момент у меня есть Баш while true; do
цикл, который сначала вычисляет содержимое скрипта, затем преобразует его в tsv и передает его в GNU less
, Затем в другом окне терминала у меня есть while true; do
петля, которая убивает less
Команда каждые 2 минуты. Но это оставляет мне 1 минуту бездействия, где я жду обновления таблицы, прежде чем смогу перемещаться по контенту с помощью less
,
Я хотел бы оптимизировать эту настройку, чтобы новая таблица создавалась в фоновом режиме не тогда, когда я убиваю команду less, а запускалась за 1 минуту до того, чтобы обновленная less
Команда всегда дает мне рабочую копию, по которой я могу ориентироваться. В идеале, без необходимости создавать третье окно терминала для него.
Есть идеи? Может GNU параллельно?
Текущая настройка:
# screen in the data folder with less command
while true; do $HOME/script -dir $PWD && xlsx2tsv $(ls $PWD/*.xlsx) 1 | column -t | less -S -N; sleep 0.5; done
# screen 2 with the less killing
while true; do pkill less; sleep 120; done
2 ответа
Моя меньшая страница руководства говорит это о команде "R"
R Перекрасьте экран, отбрасывая любые буферизованные данные. Полезно, если файл изменяется во время просмотра.
Итак, просто нажмите R, чтобы обновить.
while true; do
(sleep 0.5
$HOME/script -dir $PWD &&
xlsx2tsv $(ls $PWD/*.xlsx) 1 |
column -t > new;
mv new old;
killall less
) &
less -S -N old
done