每当我在 shell 中使用类似寻呼机less
或编辑器nano
(我的 shell 是 GNU bash)时,我都会看到一种我无法完全解释的行为,这与我可以使用其他工具(如cat
或ls
. 我想问一下这种行为是怎么产生的。
不容易解释的行为是,通常所有输出到 stdout/stderr 最终都被记录在终端模拟器后台缓冲区中,所以我可以向后滚动,而在使用less
or的情况下(对我来说不太正常)nano
,输出由终端模拟器显示,但在退出程序时,内容“神奇地消失”。
我想举两个例子:
seq 1 200
(在后台缓冲区中生成 200 行)seq 1 200 | less
(让我翻页 200 行,但最终“清理”并在后台缓冲区中没有记录任何内容)我的怀疑是某种转义代码在起作用,我很感激有人指出我对这种观察到的行为差异的解释。
由于一些评论和答案是措辞的,就好像我希望改变行为一样,这“很高兴知道”,但实际上所需的答案应该是对机制的描述,而不是改变它的方法。
我试图使用 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
应该切换到第二个屏幕缓冲区,执行后应该已经回到第一个屏幕缓冲区。
脚本切换到第二个屏幕,但返回后它留下了一个不应该存在的空白区域。