
이 질문은 AIX 7에 대한 것입니다.
나는 여러 페이지의 텍스트를 표시하는 모니터를 작업하고 있습니다. 처음에 최종 사용자는 내가 만든 스크롤 목록을 원했습니다.
IFS=''; cat plfeed | while read line; do echo $line; perl -e 'select(undef,undef,undef,.8)'; done
최종 사용자는 설정된 시간(예: 20초) 동안 출력 페이지(24줄)를 표시하기로 결정했습니다. 더 많은 기능을 사용하면 한 번에 한 페이지를 표시할 수 있지만 내 사용 사례에는 허용되지 않는 키보드 입력이 필요합니다.
tldr;
'more' 명령을 자동화하거나 페이지 사이에 잠자고 자동으로 넘어가는 유사한 기능을 구축하려면 어떻게 해야 합니까?
답변1
이 표준은 awk
AIX에서는 괜찮습니다.
awk '{if(NR>1 && NR%24==1)system("sleep 20");print}'
주석에서 언급했듯이 인터럽트 시 종료하려면 다음을 사용하면 됩니다 system()
.
{if(system("sleep 20"))exit}
하지만 귀하의 OS에서는 작동하지 않을 수 있습니다.
답변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.