答案1
是什么生成了此消息
这不是由 Bourne Again shell 生成的。这不是蒂尔达制作的。
这是由ps
以下命令生成的procps 工具集表演这个检查它的set_screen_size()
功能。该ps
命令要求您的终端设备至少为 9 列 x 2 行,以便能够合理地显示内容。在某个地方,您可能不知道,您正在调用ps
.
该ps
命令直接从附加到其标准 I/O 文件描述符的终端设备(的线路规则)获取终端大小,并且如果它们的值是正确的数字,则允许被环境变量COLUMNS
覆盖。LINES
您可以ps
通过运行以下命令来查看命令所看到的内容,以便做出决定:
stty 大小; printenv 列 行您可以通过运行以下命令来尝试拉动
ps
腿:列=65535 行=1 ps
如果您已将COLUMNS
和LINES
环境变量设置为愚蠢的 131072×1 值(如 的输出所示)printenv
,那么就不要这样做。 ☺ 然而,终端设备本身更有可能报告此大小,您可以从 的输出中看到这一点stty
。 (请注意,Bourne Again shell 所做的全部工作checkwinsize
就是设置这些 shell 变量的值,如果不导出,这些变量甚至不会传递到ps
其环境中的命令,无论终端设备报告大小如何。checkwinsize
红色也是如此。鲱鱼,如果环境变量是无意义的,终端设备本身正在报告废话,后者才是要解决的根本问题。)
这就是为什么虽然它没有产生蒂尔达可能有错的消息。终端设备大小是一种共享资源,任何具有终端设备打开文件描述符的东西都可以通过ioctl()
系统调用任意更改。但它是按照惯例设置,在使用软件的场景中终端仿真程序与 Tilda 一样,当显示仿真的 GUI 窗口的大小发生变化时,由终端仿真器程序执行。终端仿真器程序获取 GUI 调整大小事件,将其转换为列和行,并使用 来设置设备大小ioctl()
。
这并不是说其他东西没有为这种废话设定大小。毕竟可以设置你自己只需运行以下命令即可达到任意无意义大小:
stty 列 1 行 65535
这让我们想到……
如何重置终端设备大小
如果您发现终端设备报告的大小是无意义的:
- 如果您使用的是 GUI 终端仿真器,请按列/行左右调整 GUI 的大小。这应该触发
ioctl()
并将终端大小设置为合理的值。 - 将大小设置为更合理的值(例如):
stty 列 80 行 25
- 使用
reset
命令。请注意,reset
除了终端设备大小之外,还设置了许多其他内容。 - 如果您的终端仿真器与 DEC VT340/VT420 兼容,请直接发出适当的 DECSCPP amd DECSLPP/DECSNLS 控制序列,或使用诺什工具集的
console-resize
(又名resizecons
) 命令来发出它们:调整大小 80x25