Docker 貌似 "upgrade" cmd.exe 控制台如何?

How does Docker seemingly "upgrade" the cmd.exe console?

我正在 运行创建一个简洁的 Go 应用程序,它提供了交互式 shell 颜色、"special" 字符和正常的 POSIXey readline 体验。

当我运行直接在cmd.exe(在Windows 10 Pro 64-bit 1903)中运行应用程序时,它会显示有关颜色支持的警告并且稍微降级(请忽略可能是我的机器设置的错误)。

cmd> bettercap.exe

WARNING: This terminal does not support colors, view will be very limited.

当我通过 Docker 在 cmd.exe 中 运行 相同的应用程序时,我得到了类似的降级体验。

$ docker run --rm bettercap/bettercap

WARNING: This terminal does not support colors, view will be very limited.

当我通过 Docker 在 cmd.exe 中 运行 相同的应用程序,但使用 interactive/tty 标志时,我得到完整的 Linux shell喜欢经验和能力。

cmd> docker run --rm -it bettercap/bettercap

我想了解的(老实说,在任何层面上)是 Docker 如何看似 "upgrade" 控制台的功能。据我所知 cmd.exe 就是不能做那些事?我熟悉有关 recent ConPTY upgrades 的文章,但我不确定我是否完全理解它或理解它在这里发挥作用或不发挥作用。

Docker 没有 "Upgrade" CMD,CMD 允许颜色,这取决于 CMD 中的可执行文件 运行 被编码以将颜色发送到屏幕。

本质上你只是告诉 Docker 继续去做。

即。你可以用 C# 编写一个可执行文件,在 CLI (CMD) 上运行,并以你选择的 CMD 支持的任意颜色写入任何文本,它会显示得很好。

对于我的生活,我不知道为什么微软在过去 30 年中故意选择不为 CMD/DOS 中 99% 自己的命令着色。

虽然我想现在他们认为这是浪费精力的事情,因为他们确实为 Powershell 着色并致力于继续前进,尤其是现在它支持 Linux。

另请注意:

CMD 本身允许您一次更改整个提示的 FG 和 BG 颜色。

也可以使用 "FindStr" 或 VBScript 和 PowerShell 编写 CMD 脚本,在整个脚本中为部分文本 BG/FG 着色,而无需通过 kludge 更改整个提示