bash에서 echo를 사용하여 한 줄 앞으로 이동하는 방법은 무엇입니까? [폐쇄]

bash에서 echo를 사용하여 한 줄 앞으로 이동하는 방법은 무엇입니까? [폐쇄]

내 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 - 커서 앞으로입니다.

사용 가능한 이스케이프 코드 목록은 다음과 같습니다.

관련 정보