に加えて、\rまたは\bアプローチして、端末全体に行をクリアするように指示する\033[2K 制御文字を使用することができます。これと比較し\bた場合の利点は\b、削除する文字の数と数を一致させる\r必要がないことです。また、新しい行が古い行より短い場合、画面に文字がはみ出しません。 1。
以下は、この質問にそれをどのように適用できるかの例であり、ここは、ブートメッセージに類似した出力を作成する関連アプリケーションの例です。この特定の例では、タイマーは0秒に達すると消え、タイマーラインは「Ready!」に置き換えられます。フレーズ。
#!/bin/bash
sek=60
echo "60 Seconds"
while ((sek--)); do
printf "One moment please: %d" "$sek"
sleep 1
printf "\r%b" "\033[2K"
done
echo "Ready!"
別の選択肢はdialog、コマンドラインで単純なダイアログを作成するためにコマンドを使用することです。ダイアログはタイマーの間画面上に残り、ループで更新されます。また、終了するまでに、タイマーは「準備完了!押して終了」メッセージにシームレスに置き換えられます。
#!/bin/bash
sek=60
echo "60 Seconds"
while ((sek--)); do
echo "$sek" | dialog --progressbox "Please wait" 10 25
sleep 1
done
dialog --msgbox "Ready! Press <OK> to finish" 10 25
watchコマンドを使用してこれを行う方法があるかもしれませんが、その方法は正確にはわかりません。