由于磁盘故障,我们最近重新安装了我们的服务器,现在我们在调整终端大小时遇到了问题。我们安装了 Debian 6.0.6。
症状
当您调整终端大小时,似乎没有基于 ncurses 的应用程序(已测试:ytalk、irssi、screen、tmux、一些 ncurses 示例应用程序)正确调整大小。屏幕通常以空白结束。在应用程序中强制重绘将使用旧的终端大小重绘。
在 bash (4.1.5(1)) 提示符下调整窗口大小时,COLUMNS 和 LINES 变量永远不会更新。
诊断
试图在 bash 中捕获 SIGWINCH,它似乎从未被接收到。这是经过测试的:
trap 'touch /home/user/sigwinch' SIGWINCH
trap 'touch /home/user/sigusr1' SIGUSR1
kill -s SIGWINCH $$
kill -s SIGUSR1 $$
Run Code Online (Sandbox Code Playgroud)
这应该在我的主目录中创建了这两个文件。它只创建了/home/user/sigusr1.
尝试kill -s SIGWINCH $$不会导致 $COLUMNS/$LINES 变量的更新。
启用checkwinsize( shopt -s checkwinsize) 将导致 bash 在从任何应用程序返回时更新 $COLUMNS/$LINES(如预期)。在checkwinsize启用启用的终端调整大小后,这会导致以下结果:
$ echo $COLUMNS ; ls > /dev/null ; echo $COLUMNS
72
107
Run Code Online (Sandbox Code Playgroud)
将我的登录 shell 更改为 tcsh 之类的内容并尝试调整终端的大小按预期工作,就像我测试的其他盒子上的 bash 一样。 …