Linux
ls
命令的顏色輸出不一致
我在當地一所大學教授 UNIX/Linux 簡介課程,我的一個學生問了以下問題:
為什麼我的目錄中的一些文件是白色的,而另一些是灰色的?白色的是我今天創建的,灰色的是現有文件嗎?
當我對此進行研究時,我首先認為答案會在
LS_COLORS
變數中,但進一步的調查顯示,使用-l
switch 與-al
使用ls
命令的 switch 時顏色列表是不同的。請參閱以下螢幕截圖:使用
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
前三行(直到藍點)以紅色列印。