Bash
WSL 上的所有目錄都是藍底綠
根據我讀過
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;42
為ow=
使設置不適用。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 的唯一方法,因為它的文件很薄弱。