首页 > 解决方案 > Docker 是如何看似“升级” cmd.exe 控制台的?

问题描述

我正在运行一个简洁的 Go 应用程序,它提供了一个带有颜色、“特殊”字符和正常 POSIXey 读取行体验的交互式 shell。

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

cmd> bettercap.exe

警告:此终端不支持颜色,视图将非常有限。

在此处输入图像描述

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

$ docker run --rm bettercap/bettercap

警告:此终端不支持颜色,视图将非常有限。

在此处输入图像描述

当我cmd.exe通过 Docker 运行相同的应用程序时,但使用 interactive/tty 标志,我获得了完整的 Linux shell 体验和功能。

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

在此处输入图像描述

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

标签: dockercmdconsoletty

解决方案


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

本质上,您只是告诉 Docker 继续执行此操作。

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

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

尽管我现在认为他们认为这是一种浪费的努力,因为他们确实为 Powershell 着色并致力于继续向前发展,特别是现在它支持 Linux。

另请注意:

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

也可以编写 CMD 脚本,对整个文本 BG/FG 的部分进行着色,而无需使用“FindStr”或 VBScript 和 PowerShell 来更改整个提示


推荐阅读