파일 텍스트를 한 번에 한 페이지씩 표시하고 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.

관련 정보