WSL 上的所有目录均为蓝底绿字

WSL 上的所有目录均为蓝底绿字

根据我读过的所有内容LS_COLORSdi=01;34应该意味着粗体蓝色。

无论我尝试什么设置,除了黑底白字(我假设我的设置不正确)或这种丑陋的标准蓝绿之外,我什么也得不到。

在此输入图像描述

我已经尝试了di=**;**:or 的每一种排列,具体取决于你问的是谁dir=**;**:,但没有结果,除了香草或丑陋之外没有其他结果。

这里发生了什么?

Windows 10 / WSL Ubuntu 20 / Windows 终端

LS_COLORS

rs=0:di=01;34:ln=01;36:mh=00:pi=40;33
:so=01;35:do=01;35:bd=40;33;01
:cd=40;33;01:or=40;31;01:mi=00:su=37;41
:sg=30;43:ca=30;41:tw=30;42:ow=34;42
:st=37;44:ex=01;32: *.tar=01;31
:*.tgz=01;31:*....

答案1

LS_COLORS没有被忽略。它导致绿色上有蓝色,这绝对不标准。绿色上的蓝色在设计上很丑陋:它表示一个全局可写的目录,这通常很少见,但在不以正常方式使用 Unix 权限的 WSL 上很常见。

这是来自ow中的设置LS_COLORS。替换ow=34;42ow=以使该设置不适用。

shopt -s extglob
LS_COLORS=${LS_COLORS/:ow=*([^:]):/:ow=:}

答案2

ow=34;42就是正在打印的内容。如果你做一个

dircolors --print-database

你可能会注意到这一行:

OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky

哪一个是ow代码。这告诉您您有一个全世界都可写的目录。正如我评论的LS_COLORS 混合匹配条件,例如文件扩展名和硬链接

然而,GNU ls 仅选择一种方案来为每个文件着色。

在这种情况下,它在表中看到比文件/目录类型更“有趣”的东西,并使用它。顺便说一句,阅读源代码是理解 GNU ls 的唯一方法,因为它的文档很薄弱。

相关内容