aircrack-ng
여기서는 터미널 화면에 텍스트를 표시하거나 매트릭스 스크립트와 같은 것을 원합니다 ...!
예를 들어, 내 터미널 화면에 이미 4줄이 포함되어 있는 경우 첫 번째 줄을 그 자리에 업데이트하고 다른 줄도 동일하게 업데이트하려고 합니다... (bash 사용)
보다 정확하게는 다음과 같은 스크립트를 원합니다.
#!/bin/bash
while :
do
echo "line1"
echo "line2"
echo "line3"
echo "line4"
# without using clear cmd, next cycle line1 should be printed
# in line1 place not in a new line , and same for other lines
done
답변1
이를 지원하는 터미널에서는 다음을 사용하여 tput sc
커서 위치를 저장하고 tput rc
복원할 수 있습니다.
i=0
tput sc
while sleep 1; do
tput rc
echo "line$((i=i+1))"
echo "line$((i=i+1))"
echo "line$((i=i+1))"
echo "line$((i=i+1))"
done
tput
각 호출을 피하기 위해 이러한 이스케이프 시퀀스를 변수에 저장할 수 있습니다 .
rc=$(tput rc) ||
echo >&2 "Warning: terminal doesn't support restoring the cursor"
...
printf '%s\n' "${rc}line1..."
이를 지원하지 않는 드문 터미널에서는 항상 커서 위치 지정 순서를 사용할 수 있습니다.
while sleep 1; do
echo "line$((i=i+1))"
echo "line$((i=i+1))"
echo "line$((i=i+1))"
echo "line$((i=i+1))"
tput cuu 4 # or up=$(tput cuu1); printf %s "$up$up$up$up"
done
자세한 내용은 terminfo
섹션 5의 매뉴얼 페이지를 참조하십시오(시스템에 ncurses가 제공되는 경우).
답변2
나는 몇 달 전에 StackOverflow에서 이 질문에 답변했습니다.마지막 터미널 출력 덮어쓰기(여러 줄). 나는 그렇게 생각하지만가능한문자 그대로 "line1", "line2" 등을 인쇄하여 OP가 의미하는 바는 교실 실습에서만 관심이 있을 것입니다. 실제 프로그램은 더 흥미로운 내용을 인쇄하므로 나는 대답합니다.저것질문. 이전과 마찬가지로 현재 q/a는 업데이트된 행이 기존 행보다 짧을 때 이 문제를 무시합니다. 이 문제를 해결하다
#!/bin/bash
tput sc
while :
do
tput rc
echo "line1"; tput el
echo "line2"; tput el
echo "line3"; tput el
echo "line4"; tput el
# without using clear cmd, next cycle line1 should be printed
# in line1 place not in a new line , and same for other lines
done
이것이 cuu
좋은 대안이라는 데 동의하십시오 grep
. 기능의 가용성을 확인하는 데 사용하는 것은 tput
그 자체를 사용하는 것보다 덜 효과적입니다.
restore=$(tput sc)
[[ -z "$restore" ]] && restore=$(tput cuu 4)
[[ -z "$restore" ]] && restore=$(tput cuu1; tput cuu1; tput cuu1; tput cuu1)
표현식에 행 번호를 삽입하는 방법은 여전히 다소 조잡합니다. 하지만 $restore
루프가 끝나면 그렇게 할 수 있습니다.
el
터미널을 체크인하면 비슷한 작업을 수행할 수 있습니다.
이것이 bash인 경우 echo "line1"
등은 실제로 함수여야 합니다(중복 호출을 제거함 tput el
).
OP가 접할 수 있는 터미널은 이러한 기능을 모두 지원할 수 있습니다. 커서 제어 저장/복원은 두 가지 주요 변형이 있으므로 약점입니다.
DECSC
/DECRC
(xterm에서 지원 - 참조XTerm 제어 순서):ESC 7 Save Cursor (DECSC). ESC 8 Restore Cursor (DECRC).
ANSI.SYS(xterm에서도 지원되지만 모든 "xterm 에뮬레이터"는 지원되지 않음):
CSI s Save cursor (ANSI.SYS), available only when DECLRMM is disabled. CSI u Restore cursor (ANSI.SYS).
기타 유용한 정보 출처:
그런데, 이 질문의 제목은 (지금까지 답변이 없는) 주어진 예에서 다음을 사용하기 때문에 잘못되었습니다.스크롤. 스크롤 영역을 사용하려면 (terminfo를 다시 참조하고 xterm과 같은 VT100과 유사한 터미널로 제한) 할 수 있습니다. 시작할 곳은 여기입니다(terminfo 매뉴얼 페이지에서):
change_scroll_region csr cs change region to
line #1 to line #2
(P)