一次一页显示文件文本,等待 20 秒,然后自动前进

一次一页显示文件文本,等待 20 秒,然后自动前进

此问题针对 AIX 7

我一直在研究一个可以显示几页文本的显示器。最初,最终用户想要一个滚动列表,我为此构建了以下内容:

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

最终用户决定他们宁愿在设定的时间(例如 20 秒)内显示一页(24 行)输出。我知道 more 可以让我一次显示一个页面,但它需要键盘输入,这对于我的用例来说是不可接受的。

太棒了;

如何自动化“更多”命令,或构建一个类似的函数,在页面之间休眠然后自动前进?

答案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这使用类似的解决方案解决了性质OP的问题。我做了以下更改:

  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.

相关内容