
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 awk
deberí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 awk
solución similar a lameuh. He realizado los siguientes cambios:
- Salir por Ctrl+ c.
- Úselo
$LINES
para obtener la altura del terminal. - Funciona en Linux y Mac OSX.
- 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.