我相信我遇到了同样的问题这家伙。我在 AIX 上,使用 tcsh 6.12.00
在(可能)错误注销之后,历史文件呈指数级增长,直到配额停止(并且当达到配额时,批处理作业也因此无法运行,从而引发了其他几个问题)。历史文件的内容如下:
9917 host: path >
Use "logout" to logout.
不断重复(实际上约 5000 万次)。注意
host: path >
实际上是提示(我稍微混淆了一下以避免垃圾邮件发送者)。
现在,发生了两个(可能独立的)问题:
- 为什么输出到了 .history 文件(而不是我退出时的屏幕)
- 为什么不强制执行保存组限制(它是 5000,所以它永远不会达到 9917)
我唯一能想到的就是某个进程的标准输出(或错误)被重定向到了那里,但这真的很奇怪!您对这个问题有什么线索吗?
不幸的是我无法随意重现该问题,这将有助于调试。
编辑:是的,这是通过 Linux 中的 X 终端仿真器进行远程(ssh)登录时发生的(偏僻的机器是 AIX,当地的Linux 操作系统
编辑:我唯一能想到的就是 tcsh 中的一个错误,当 tty 发生“坏事”时,它会错误地使用 .history 文件描述符,而它本来应该打开它来更新历史记录。但情况真是这样吗?没有提到任何内容这里
答案1
这里没有明确的答案,但有几个随机的想法可能会有帮助,也可能没有帮助:
短语“使用“logout”注销。”听起来很像 tcsh 得到了一个 EOF (^D) 字符并且不喜欢它,而是要求您输入“logout”。那么所有这些(假设的)EOF 是从哪里来的呢?
您是否像在 Cygwin 中遇到此问题的人一样,通过某种 X 终端仿真器(xterm、rxvt 等)使用 shell?我想知道是否发生了什么,因为终端仿真器关闭,从而关闭了 shell 进程正在连接的 pty,这导致 shell 读取“无尽”的 EOF 字符系列,此时它会旋转到无穷大。也许这里存在某种竞争,其中 term 窗口在实际通知 shell 会话已完成之前就关闭了?
可以尝试的一件事是弄清楚 a) 你的配置中的 tcsh 是否确实接受(或拒绝)EOF 作为注销方式,以及 b) 如果拒绝,找出允许它的切换按钮。
我知道这充其量只是推测,我不使用 tcsh,而且我对 X 内部结构和 tty 模拟的了解(幸亏我头脑清醒)相当有限。但无论如何,这种情况似乎是合理的。