
Diese Frage bezieht sich auf AIX 7
Ich habe an einem Monitor gearbeitet, auf dem mehrere Seiten Text angezeigt werden. Ursprünglich wollte der Endbenutzer eine Scrollliste, für die ich Folgendes erstellt habe:
IFS=''; cat plfeed | while read line; do echo $line; perl -e 'select(undef,undef,undef,.8)'; done
Der Endbenutzer hat entschieden, dass er lieber eine Seite (24 Zeilen) mit Ausgabe für eine festgelegte Zeitspanne (z. B. 20 Sekunden) anzeigen möchte. Ich weiß, dass ich mit mehr eine Seite gleichzeitig anzeigen kann, aber dafür ist eine Tastatureingabe erforderlich, die für meinen Anwendungsfall nicht akzeptabel ist.
kurz und knapp;
Wie kann ich den Befehl „Mehr“ automatisieren oder eine ähnliche Funktion erstellen, die zwischen den Seiten pausiert und dann automatisch weiterschaltet?
Antwort1
Dieser ziemliche Standard awk
sollte unter AIX in Ordnung sein
awk '{if(NR>1 && NR%24==1)system("sleep 20");print}'
Wie in den Kommentaren erwähnt, können Sie, wenn Sie bei einer Unterbrechung beenden möchten, das system()
durch ersetzen
{if(system("sleep 20"))exit}
aber es funktioniert möglicherweise nicht auf Ihrem Betriebssystem.
Antwort2
#!/usr/bin/env expect
set timeout 20
spawn -noecho man autoexpect
while 1 {
expect {
timeout { send " " }
-ex "(END)" { exit }
}
}
Antwort3
Dies beantwortet die Frage des Natur-OP mit einer ähnlichen awk
Lösung wiemeeh. Ich habe folgende Änderungen vorgenommen:
- Beenden über Ctrl+ c.
- Wird verwendet
$LINES
, um die Höhe des Terminals zu ermitteln. - Funktioniert unter Linux und Mac OSX.
- Dokumentation und Erklärungen hinzugefügt.
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.