Отображение текста файла по одной странице за раз, ожидание 20 секунд, затем автоматическое продвижение вперед

Отображение текста файла по одной странице за раз, ожидание 20 секунд, затем автоматическое продвижение вперед

Этот вопрос для AIX 7

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

IFS=''; cat plfeed | while read line; do echo $line; perl -e 'select(undef,undef,undef,.8)'; done

Конечный пользователь решил, что он предпочтет отображать страницу (24 строки) вывода в течение установленного периода времени (например, 20 секунд). Я знаю, что большее значение позволит мне отображать страницу за раз, но для этого требуется ввод с клавиатуры, что неприемлемо для моего варианта использования.

вкратце;

Как автоматизировать команду «еще» или создать аналогичную функцию, которая будет «спать» между страницами, а затем автоматически переходить вперед?

решение1

Это довольно стандартно, awkдолжно быть нормально на AIX

awk '{if(NR>1 && NR%24==1)system("sleep 20");print}'

Как упоминалось в комментариях, если вы хотите выйти по прерыванию, вы можете заменить system()на

{if(system("sleep 20"))exit}

но это может не работать на вашей ОС.

решение2

#!/usr/bin/env expect 
set timeout 20
spawn -noecho man autoexpect
while 1 {
  expect {
    timeout { send " " }
    -ex "(END)" { exit }
  }
}

решение3

Это отвечает на вопрос автора статьи о природе, используя похожее awkрешениемеухЯ внес следующие изменения:

  1. Выход через Ctrl+ c.
  2. Используйте $LINESдля получения высоты терминала.
  3. Работает на Linux и Mac OSX.
  4. Добавлена ​​документация и пояснения.
awk -v x=$LINES 'NR % x == 0 && system("sleep 20"){exit} 1'
#    ^^^^^^^^^^  ^  ^^^^^^^^      ^                      ^
#       |        |  |             |                      |
#       |        |  |             |                      |
#       |        |  |             |                      +
#       |        |  |             |   f) pattern-action block which
#       |        |  |             |      prints the current line.
#       |        |  |             |        - Pattern is Truethy.
#       |        |  |             |        - Action is empty
#       |        |  |             |          defaulting to `{print}`
#       |        |  |             |
#       |        |  |             +
#       |        |  |   d) `system` function returns exit code `0` when
#       |        |  |       successful and non-zero on 'ctrl-c'.
#       |        |  |
#       |        |  |   e) `0` evaluates to false, so `exit` will not
#       |        |  |       execute until `ctrl-c` is triggered.
#       |        |  +
#       |        | c) When line number is evenly divisible
#       |        |    by x (the terminal height)
#       |        |    sleep for 1 second.
#       |        | 
#       |        | 
#       |        +
#       |   b) NR current line number.
#       |
#       +
# a) Set variable `x` to Bash variable $LINES.
#    $LINES is set to height of current terminal.

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