![bash에서 echo를 사용하여 한 줄 앞으로 이동하는 방법은 무엇입니까? [폐쇄]](https://linux55.com/image/73459/bash%EC%97%90%EC%84%9C%20echo%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%95%9C%20%EC%A4%84%20%EC%95%9E%EC%9C%BC%EB%A1%9C%20%EC%9D%B4%EB%8F%99%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
내 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 - 커서 앞으로입니다.