Bash

WSL 上的所有目錄都是藍底綠

  • September 24, 2021

根據我讀過LS_COLORS的所有內容,di=01;34應該是粗體藍色。

無論我嘗試什麼設置,除了黑底白字(我假設我的設置不正確)或這種醜陋的、標準的綠底藍字之外,我什麼也得不到。

在此處輸入圖像描述

我已經嘗試了 or 的所有排列di=**;**:,這取決於您要求誰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:*....

LS_COLORS不被忽視。它導致綠色上的藍色,這絕對不標準。綠色上的藍色在設計上是醜陋的:它表示一個全域可寫的目錄,這通常很少見,但在 WSL 上很常見,它不以正常方式使用 Unix 權限。

這來自於 中的ow設置LS_COLORS。替換ow=34;42ow=使設置不適用。

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

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 的唯一方法,因為它的文件很薄弱。

引用自:https://unix.stackexchange.com/questions/670501