echo/printf 行を別の行で上書きするにはどうすればよいでしょうか? (画面の中央から開始するようにする)

echo/printf 行を別の行で上書きするにはどうすればよいでしょうか? (画面の中央から開始するようにする)

選択した文を出力するスクリプトを書きたいです。 それらを画面の中央に表示したいです。最初の文を出力し、次に 2 番目の文を最初の文の上に表示します。 これが私のコードです:

    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!"

私の意図は、スターウォーズ版の冒頭と同じように、最初の行を 2 番目の行で上書きすることですtelnet towel.blinkenlights.nl。別の質問を読んで、中央に表示させることはできましたが、2 番目の行を最初の行とまったく同じ行から開始することは不可能だと思います。何か手がかりはありますか?

答え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プロンプトを最後に独自の行にするために最後を追加しました。

関連情報