一段时间以来,我的终端显示的颜色一直很奇怪。上面是超级终端中 bash(来自 Windows Linux 子系统)的屏幕截图。您可以看到,颜色一开始正常,但之后我遇到了一堆权限问题ls
,一切都出错了。灰色背景一直持续下去。
虽然我没有截图,但我也目睹了 VSCode 中 Powershell 内部的相同行为 - 所以我不太确定这是否是 Hyper 的问题。似乎一旦出现错误,或者 shell 出于某种原因觉得需要显示颜色,一切都会变得混乱。
此外,我尝试过但ls --color=auto
没有成功——结果是一样的。
是否有人知道 Windows / bash / WSL 设置可以防止这种情况发生?
编辑:我发现此突出显示尊重在 Windows 上的 Ubuntu 上的 Bash 设置窗格中的“默认”选项中设置的任何默认“屏幕背景”颜色,但仅在调用某些命令时才会出现(如我上面的屏幕截图所示)?对于比我更有知识的人来说,这有意义吗?
答案1
深入研究后,我发现解决方案是在 WSL 设置中将默认颜色设置为“屏幕背景”颜色黑色的(#000)。我尝试按照 Scott 的回答设置我想要的颜色,但是没有成功。似乎 WSL 传来的任何颜色都是可加的,因此任何颜色变化都会与第三方程序(Hyper、VSCode)中的背景颜色结合并发生冲突。
答案2
您的更新澄清了这种情况。简单地说,程序通过将文本写入终端来告诉终端显示文本。一个不太明显的事实是,程序可以通过将不显示的字符写入终端来命令终端执行各种其他操作(例如,移动光标或擦除(部分)屏幕)。有几个单独的字符可以执行操作(例如,Backspace 和 Carriage Return 移动到左侧,Tab 移动到右侧)。但通常它们是字符序列,几乎总是以 Escape 开头,因此它们被称为“转义序列”。早在 20 世纪 70 年代和 80 年代,当终端是硬件产品,每个供应商都选择自己的转义序列,这很混乱。随着时间的推移,标准已经发展起来。
一组有趣的转义序列是选择图形呈现 (SGR)家庭控制如何可显示文本。这包括粗体、斜体、下划线和颜色等属性。通常,在以默认样式以外的样式显示文本后,程序将尝试将终端恢复为其默认显示方案。有转义序列可以关闭离开 粗体、斜体和下划线,但它们的支持范围不如打开这些属性的选项那么广泛。有转义序列可以将颜色设置为黑色背景上的白色前景,但这并不好,因为用户可能更喜欢不同的默认方案。因此,使用颜色的程序通常以发送重置序列结束 — 并将终端切换到其默认显示方案,如属性中指定的那样。
总结 类似pwd
这样的程序只是显示文本,只是显示文本。显示彩色文本的程序结束时会将终端重置为其默认颜色,并且它们会一直有效,直到其他程序编写转义序列来再次更改它们。
这就留下了一个问题:为什么终端开始是否采用黑底白字模式?也许您的某个初始化文件 (、等) 中有.profile
明确.bashrc
设置这些颜色的内容。
解决方案是将默认属性更改为您想要的(例如,黑色背景上的白色文本)。您似乎已经找到了适当的对话框;只需将屏幕背景颜色更改为黑色并单击“确定”即可。