这是一件奇怪的事情:我刚刚注意到,当运行嵌套在其自身中的“cmd”最多 3 倍时,命令提示符历史记录可以正常工作,但在 4 倍及以上时会失败。在我尝试过的几台电脑上,它似乎是一致的。
知道为什么它会停止工作吗?有什么原因会导致它在那个特定点失败吗?
use*_*686 11
这个特殊的功能不是由 Cmd \xe2\x80\x93 提供的,它实际上是由 Conhost 提供的,该程序绘制“旧版”控制台窗口(即使您正在使用,它仍然在幕后参与) Windows 终端,尽管在这种情况下它被称为OpenConsole.exe)。Conhost 为所有采用基于行的输入(Unix 术语中的“cooked 模式”)的程序提供行编辑、历史记录和别名(“doskey”)功能。
\n每个 Conhost 实例将为每个控制台窗口保留固定数量的历史缓冲区(以及每个历史缓冲区记住的命令的固定限制):
\n\n可以通过运行conhost cmd弹出“旧版”控制台来访问上述对话框,然后打开其窗口菜单并选择“默认”(而不是“属性”)来调整所有控制台窗口的这些限制。
“Windows 控制台”子系统在大约 1995 年左右在 NT 3.x 中引入,因此当时的限制可能是合理的(特别是考虑到历史缓冲区曾经是csrss.exe当时的一部分),并且从那以后没有人对它们进行调整。
Conhost 的源代码作为 Windows 终端的一部分在 GitHub 上提供,您可以在settings.cpp中找到这些默认值。(微软总体上正在从NT 风格的“控制台”架构转向 Unix 风格的“终端”模型,但 Conhost 仍然存在以提供现在遗留的“控制台”API。)
\n您可以尝试建议增加默认的 Conhost 限制,但他们可能会建议在本地配置它们,而不是 \xe2\x80\x93 或移动到 PowerShell(它不使用 Conhost\ 的历史记录;它需要输入\'raw\' 模式并实现自己的行编辑,就像 Bash 那样)。
\n| 归档时间: |
|
| 查看次数: |
803 次 |
| 最近记录: |