根据我读过的所有内容LS_COLORS
,di=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;42
为ow=
以使该设置不适用。
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 的唯一方法,因为它的文档很薄弱。