이 질문은 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 문제를 해결합니다.음. 다음과 같이 변경했습니다.
- Ctrl+ 를 통해 종료합니다 c.
$LINES
터미널의 높이를 가져오는 데 사용됩니다 .- Linux 및 Mac OSX에서 사용할 수 있습니다.
- 문서와 설명을 추가했습니다.
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.