Debian SSH – Resizing终端没有注册bash
我们最近因磁盘故障而重新安装了我们的服务器,现在我们遇到了调整终端大小的问题.我们安装了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 $$ 哪个应该在我的主目录中创建这两个文件.它只创建了/ home / user / sigusr1. 试图杀死-s SIGWINCH $$不会导致更新$COLUMNS / $LINES变量. 启用checkwinsize(shopt -s checkwinsize)将导致bash在从任何应用程序返回时更新$COLUMNS / $LINES(如预期的那样).调整启用了checkwinsize的终端后,会出现以下情况: $echo $COLUMNS ; ls > /dev/null ; echo $COLUMNS 72 107 将我的登录shell更改为类似tcsh并尝试调整终端的大小可以正常工作,就像我测试的其他盒子上的bash一样. 我尝试删除我的.bashrc并没有做任何事情.对于PuTTY和Linux机箱中的某种rxvt类型终端中具有不同bash配置的其他几个用户,会出现此问题. strace的 我在bash上运行strace并试图调整终端的大小,没有任何结果(在打印提示后它立即在读取调用时被阻止). 我在一条空线上回击,而bash做了很多东西.我认为相关的输出是:(full strace) 1: rt_sigprocmask(SIG_SETMASK,[WINCH],NULL,8) = 0 2: rt_sigaction(SIGWINCH,{0x80e2c20,[],SA_RESTART},{0x809c310,0},8) = 0 3: rt_sigprocmask(SIG_BLOCK,[INT],8) = 0 4: write(2,"aa:~$",6) = 6 5: rt_sigprocmask(SIG_SETMASK,8) = 0 6: rt_sigprocmask(SIG_BLOCK,8) = 0 7: read(0, 根据我的理解,这显示了bash :(我可能会误解这个.我在这里已经超出了我的元素.) 1: Disabling delivery of the SIGWINCH signal,when previously it was allowed. 2: Registering a handler for the SIGWINCH signal. 3: Masking some other combination of signals. As evidenced by line 5,this does not include SIGWINCH. 4: Printing the prompt. 5: Masking SIGWINCH,where previously nothing was blocked. 6: Masking the "union of null and SIGWINCH" which,to my understanding,would result in SIGWINCH being masked. 7: Waiting on input. 在没有这些问题的盒子上执行相同的strace(Ubuntu,bash 4.2.24(1))导致: 1: rt_sigprocmask(SIG_SETMASK,{0x49e320,SA_RESTORER|SA_RESTART,0x7f7ef49f64c0},{0x457880,SA_RESTORER,"aaaaaaa:~$",11) = 11 5: rt_sigprocmask(SIG_SETMASK,8) = 0 7: read(0, 题 到底是怎么回事,为什么我的打击被打破了? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |