次のような人工的な例(正しい例は、ユーザーに一連の質問を導き、ユーザーの回答の計算を標準出力に反映すること)が与えられた場合、サブコマンドが完了した後にTTYの修正を消去できますか?
result="$(echo 'sup' > /dev/tty; echo "$RANDOM"; sleep 2)"; echo "result=[$result]"
答え1
からインスピレーションを受けるhttps://stackoverflow.com/a/21319342/130638
result="$(tput smcup > /dev/tty; tput cup 0 0 > /dev/tty; echo 'sup' > /dev/tty; echo "$RANDOM"; sleep 2; tput rmcup > /dev/tty)"; echo "result=[$result]"
説明する:
tput smcup
代替画面バッファと交換tput cup 0 0
この画面バッファのカーソルを一番上に設定します。それ以外の場合は前の位置になります。したがって、コール前にカーソルが画面の中央にあった場合、sup も画面の中央に移動します。tput rmcup
この代替画面バッファを削除して消去し、前の画面バッファに戻します。