g4u*_*r4v 2 run-dialog tput dialog
我试图使用 tput 为我的脚本使用不同的屏幕缓冲区。下面是我正在运行的小脚本。
tput smcup
clear
dialog --yesno "Do you want to continue?" 0 0
rc=$?
clear
tput rmcup
if [ "${rc}" == "0" ]; then
echo Yes
else
echo No
fi
Run Code Online (Sandbox Code Playgroud)
脚本执行完成后,屏幕上有一个空白部分(如下图所示),它等于运行脚本前提示占用的行数。理想情况下tput应该切换到第二个屏幕缓冲区,执行后应该已经回到第一个屏幕缓冲区。
脚本切换到第二个屏幕,但返回后它留下了一个不应该存在的空白区域。

这是dialog来自http://invisible-island.net/dialog/dialog.html的实现的问题。
在启动时,它自己做一个smcup+ rmcup,我相信是因为ncurses初始化例程做了smcup并且dialog想要取消它。所以如果你smcup事先做了你的,它不会有效果,因为它rmcup会取消它。
一种解决方法是添加--keep-tite告诉它不要这样做的选项,如果终端支持它,那么它dialog会像其他应用程序一样smcup在启动和rmcup退出ncurses时进行。
从您的评论来看,您似乎还有另一个问题:您所在的终端不支持替代屏幕,因此无论您做什么,您都无法使用该替代屏幕,因为它不存在。
你可以做的是使用一个不同的终端,它有一个替代屏幕,比如腻子,或者来自 Cygwin 的 X 服务器上的 Cygwin 的 Unix 终端。或者在远程服务器上运行 X 终端以连接到 X 服务器并在其上显示。或者在您的终端中运行一个基于终端的终端模拟器,它支持像 GNU 这样的替代屏幕screen。
| 归档时间: |
|
| 查看次数: |
1892 次 |
| 最近记录: |