echo/printf 줄을 다른 줄로 덮어쓰는 방법은 무엇입니까? (화면 중앙에서 시작하도록 설정)

echo/printf 줄을 다른 줄로 덮어쓰는 방법은 무엇입니까? (화면 중앙에서 시작하도록 설정)

내가 선택한 문장을 출력하는 스크립트를 작성하고 싶습니다. 나는 그것들이 화면 중앙에 나타나기를 원합니다. 첫 번째 것을 출력하고 두 번째 것을 첫 번째 위에 나타나게 합니다. 내 코드는 다음과 같습니다.

    COLUMNS=$(tput cols) 

printf "%*s\n" $((($COLUMNS)/2)) "Hey, welcome to my script!" "%\r"
sleep 2
printf "%*s" $((($COLUMNS)/2)) "This is a new line!"

telnet towel.blinkenlights.nl내 의도는 특정 스타워즈 버전의 시작 부분에서 했던 것과 같은 방식으로 첫 번째 줄을 두 번째 줄로 덮어쓰는 것입니다 . 다른 질문을 읽어서 중앙에 나타나게 했지만 두 번째 줄이 첫 번째 줄과 똑같은 줄에서 시작하도록 만드는 것은 불가능하다는 것을 알았습니다. 어떤 단서가 있나요?

답변1

문제는 \n첫 번째 printf. 그러면 커서가 다음 줄로 이동하므로 새 텍스트를 인쇄할 때 이전 텍스트를 덮어쓰는 것이 같은 줄에 있지 않습니다. 그것을 제거하면 좋을 것입니다.

COLUMNS=$(tput cols) 

printf "%*s\r" $((COLUMNS/2)) "Hey, welcome to my script!"
sleep 2
printf "%*s" $((COLUMNS/2)) "This is a new line!"
printf "\n"

나는 잘못된 것에 대한 당신의 올바른 관찰을 수정 \r하고 수학을 약간 단순화했습니다. 그런 다음 \n마지막 줄에 프롬프트를 표시하기 위해 마지막 줄을 추가했습니다.

관련 정보