내 bash(또는 tcl) 스크립트가 세 개의 열을 연속으로 업데이트하도록 하려고 합니다. 줄의 시작 부분으로 돌아온 후 일부 문자를 계속 건너뛰는 방법을 모르겠습니다. 전체 행이 아닌 특정 정보를 업데이트하고 싶습니다.
내 스크립트는 세 가지 유형의 메시지(P1, P3 및 P7) 중 하나를 보내는 다른 스크립트의 여러 인스턴스를 병렬로 실행합니다. 메시지가 전송되면 해당 메시지 유형과 관련된 열을 업데이트해야 합니다.
echo를 사용하여 다음과 같은 내용을 인쇄하고 싶습니다.
보낸 메시지 수는 다음과 같습니다.
P1:2 P3:1 P7:5
첫 번째 줄은 정적이고 두 번째 줄은 동적입니다(두 번째 줄의 숫자는 지속적으로 업데이트되어야 함). '\b' 또는 '\r'을 사용하면 문자를 덮어쓰지 않고 줄에서 뒤로 이동할 수 있습니다. 하지만 이전 문자를 덮어쓰지 않고 어떻게 앞으로 나아갈 수 있습니까? 일종의 "역방향" "\b"가 있나요?
답변1
tput(1)
이 작업에 적합할 수 있습니다.
#! /usr/bin/env bash
trap 'printf "\nbe seeing you\n"; exit' INT
clear
printf "blah de blah\n"
while [[ 1 ]]; do
tput cup 1 0
x=$(( RANDOM % 42 ))
y=$(( RANDOM / 42 ))
z=$(( RANDOM * 42 ))
printf "P1: %d P3: %d P7: %d\n" $x $y $z
sleep 1
done
답변2
(이것은 배쉬입니다)
printf "P1: 2 P3: 1 P7: 5\n"
printf "\033[2A\033[4C3\033[2B\r"
인쇄 P1: 2 P3: 1 P7: 5
한 다음 로 변경합니다 P1: 3 P3: 1 P7: 5
.
터미널 이스케이프 코드를 인쇄하는 일반적인 방법은 다음과 같습니다.
\033 값 [ 암호
여기서 샘플 코드는 A - 커서 위, B - 커서 아래, C - 커서 앞으로입니다.