Linux

ls 命令的顏色輸出不一致

  • March 3, 2019

我在當地一所大學教授 UNIX/Linux 簡介課程,我的一個學生問了以下問題:

為什麼我的目錄中的一些文件是白色的,而另一些是灰色的?白色的是我今天創建的,灰色的是現有文件嗎?

當我對此進行研究時,我首先認為答案會在LS_COLORS變數中,但進一步的調查顯示,使用-lswitch 與-al使用ls命令的 switch 時顏色列表是不同的。請參閱以下螢幕截圖:

使用 ls -l 名為“3”的文件顯示為白色

使用 -al 開關相同的文件顯示灰色

使用ls -l名為“3”的文件顯示為白色,但使用-al開關相同的文件顯示為灰色。

這是 ls 中的錯誤還是有人知道為什麼會這樣?

看起來您的提示字元串 ( $PS1) 正在為字元設置粗體屬性以使顏色更好,而不是取消設置。的輸出**ls不知道這一點,並且設置粗體。所以在 的第一個顏色輸出之後ls**,一切看起來都變暗了。

ls 的整個輸出將以最後一種活動顏色列印。如果ls沒有顏色呼叫:

$ printf '\e[0;31m color test\n'; /bin/ls
color test
filea  fileb  filec  filed  filee  filef  fileg  fileh

將以紅色列印文件列表。

或者,如果 ls 不需要更改顏色,則將保留最後一種顏色:

$ mkdir t1; cd t1; touch file{a..h}
$ printf '\e[0;31m color test\n'; /bin/ls --color -l
color test
total 0
-rw-r--r-- 1 user user 0 Feb 23 01:16 filea
-rw-r--r-- 1 user user 0 Feb 23 01:16 fileb
-rw-r--r-- 1 user user 0 Feb 23 01:16 filec
-rw-r--r-- 1 user user 0 Feb 23 01:16 filed
-rw-r--r-- 1 user user 0 Feb 23 01:16 filee
-rw-r--r-- 1 user user 0 Feb 23 01:16 filef
-rw-r--r-- 1 user user 0 Feb 23 01:16 fileg
-rw-r--r-- 1 user user 0 Feb 23 01:16 fileh

儘管如此,一切都是紅色的。

但是,一旦ls需要設置顏色(然後將顏色重置為控制台使用的預設值),此後使用的顏色將是控制台預設值。

$ printf '\e[0;31m color test\n'; /bin/ls --color -la
color test
total 8
drwxr-xr-x 2 user user 4096 Feb 23 01:16 .
drwxr-x--- 7 user user 4096 Feb 23 01:15 ..
-rw-r--r-- 1 user user    0 Feb 23 01:16 filea
-rw-r--r-- 1 user user    0 Feb 23 01:16 fileb
-rw-r--r-- 1 user user    0 Feb 23 01:16 filec
-rw-r--r-- 1 user user    0 Feb 23 01:16 filed
-rw-r--r-- 1 user user    0 Feb 23 01:16 filee
-rw-r--r-- 1 user user    0 Feb 23 01:16 filef
-rw-r--r-- 1 user user    0 Feb 23 01:16 fileg
-rw-r--r-- 1 user user    0 Feb 23 01:16 fileh

前三行(直到藍點)以紅色列印。

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