给出以下人为的示例(正确的示例是引导用户解决一系列问题,并将用户答案的计算结果回显到标准输出),我如何才能在子命令完成后清除对 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
删除并清除此替代屏幕缓冲区并交换回前一个屏幕缓冲区