如何让 bash 子命令清除对 TTY 的修改?

如何让 bash 子命令清除对 TTY 的修改?

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

相关内容