相关疑难解决方法(0)

退出后,某些工具(例如 nano ,less)如何设法在终端中不留下任何内容?

每当我在 shell 中使用类似寻呼机less或编辑器nano(我的 shell 是 GNU bash)时,我都会看到一种我无法完全解释的行为,这与我可以使用其他工具(如catls. 我想问一下这种行为是怎么产生的。

不容易解释的行为是,通常所有输出到 stdout/stderr 最终都被记录在终端模拟器后台缓冲区中,所以我可以向后滚动,而在使用lessor的情况下(对我来说不太正常)nano,输出由终端模拟器显示,但在退出程序时,内容“神奇地消失”。

我想举两个例子:

  • seq 1 200 (在后台缓冲区中生成 200 行)
  • seq 1 200 | less (让我翻页 200 行,但最终“清理”并在后台缓冲区中没有记录任何内容)

我的怀疑是某种转义代码在起作用,我很感激有人指出我对这种观察到的行为差异的解释。

由于一些评论和答案是措辞的,就好像我希望改变行为一样,这“很高兴知道”,但实际上所需的答案应该是对机制的描述,而不是改变它的方法。

pager terminal escape-characters

41
推荐指数
3
解决办法
2948
查看次数

屏幕缓冲区和对话框

我试图使用 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应该切换到第二个屏幕缓冲区,执行后应该已经回到第一个屏幕缓冲区。 脚本切换到第二个屏幕,但返回后它留下了一个不应该存在的空白区域。

在此处输入图片说明

run-dialog tput dialog

2
推荐指数
1
解决办法
1892
查看次数

标签 统计

dialog ×1

escape-characters ×1

pager ×1

run-dialog ×1

terminal ×1

tput ×1