줄을 업데이트하는 대신 새 줄에 줄 변경 사항("\r" 사용)을 인쇄합니다.

줄을 업데이트하는 대신 새 줄에 줄 변경 사항("\r" 사용)을 인쇄합니다.

제가 아는 한 많은 프로그램이생기해당 명령줄 출력( stdout또는 stderr)에는 \r캐리지 리턴이 있습니다. 예를 들어 apt-get update패키지 다운로드 비율을 업데이트하거나 docker-compose up업데이트 및/또는 시작되는 컨테이너 목록에 애니메이션을 적용합니다. 물론 수천 가지의 다른 예도 있습니다.

여기에 이미지 설명을 입력하세요.

다음이 필요합니다. 행을 업데이트할 때마다 실제로 이 행을 새 행에 다시 작성합니다. 위에 표시된 gif를 예로 들어 보겠습니다. 비슷한 것을 원합니다.

buntu-22.04.2-deskt   0%[                    ]  25,59M  11,5MB/s               
untu-22.04.2-deskto   0%[>                   ]  30,68M  11,5MB/s               
ntu-22.04.2-desktop   0%[>                   ]  35,21M  11,5MB/s       
tu-22.04.2-desktop-   0%[=>                  ]  40,47M  11,5MB/s       
...        

어떻게 해야 하나요? 이 기능을 사용하는 모든 프로그램에서 작동하기를 원합니다.

나는 시도했지만 command | tr '\r' '\n'작동하지 않았습니다.

답변1

Curses는 터미널이 지원하는 모든 것을 사용합니다. Linux 및 기타 Unix 계열 시스템의 경우 ANSI 시퀀스를 사용합니다.

예를 들어 printf "\033[17;62H"명령줄을 사용해 보세요. 커서가 17행과 62열로 이동하는 것을 볼 수 있습니다.

위키피디아 항목을 보면,ANSI 이스케이프 코드아래로 스크롤하면 CSI (Control Sequence Introducer) sequences필요한 것이 무엇인지 알 수 있습니다.

올바른 문자 순서로 할 수 있는 일이 많기 때문에 전체 페이지를 살펴보는 것이 좋습니다.

관련 정보