Muestra el texto del archivo una página a la vez, espera 20 segundos y luego avanza automáticamente

Muestra el texto del archivo una página a la vez, espera 20 segundos y luego avanza automáticamente

Esta pregunta es para AIX 7

He estado trabajando en un monitor que mostrará varias páginas de texto. Inicialmente, el usuario final quería una lista de desplazamiento para la cual construí esto:

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

El usuario final ha decidido que prefiere mostrar una página (24 líneas) de resultados durante un período de tiempo determinado (20 segundos, por ejemplo). Sé que más me permitirán mostrar una página a la vez, pero requiere entrada de teclado, lo cual no es aceptable para mi caso de uso.

tldr;

¿Cómo puedo automatizar el comando "más" o crear una función similar que permanezca entre páginas y luego avance automáticamente?

Respuesta1

Este estándar bastante awkdebería estar bien en AIX

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

Como se menciona en los comentarios, si desea salir en caso de interrupción, puede reemplazar el system()por

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

pero es posible que no funcione en su sistema operativo.

Respuesta2

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

Respuesta3

Esto aborda la pregunta de naturaleza de OP utilizando una awksolución similar a lameuh. He realizado los siguientes cambios:

  1. Salir por Ctrl+ c.
  2. Úselo $LINESpara obtener la altura del terminal.
  3. Funciona en Linux y Mac OSX.
  4. Se agregó documentación y explicaciones.
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.

información relacionada