ls命令输出的颜色不一致


28

我在本地大学教授UNIX / Linux入门课程,我的一个学生问了以下问题:

为什么目录中的某些文件显示为白色,而其他文件显示为灰色?白色是我今天创建的,灰色是现有文件吗?

当我研究这个问题时,我首先认为答案将在LS_COLORS变量中,但是进一步的调查表明,使用-l开关与-al使用ls命令开关时,颜色列表是不同的。请参阅以下屏幕截图:

使用ls -l,名为“ 3”的文件显示为白色

使用-al开关,同一文件显示为灰色

使用ls -l名为“ 3”的文件显示为白色,而使用-al开关时,相同的文件显示为灰色。

这是ls中的错误,还是有人知道为什么会这样?


请输入您的问题标题:这种颜色与ls命令本身无关。
德鲁

FWIW,通过与LS_COLORS混淆可以得到的最接近值为LS_COLORS='rs=0;1' ls -l,但是它看起来非常不同。
wjandrea

4
@Drew在调查问题之后才知道。显然ls可以改变其输出的颜色。
管道

@pipe:不,我很早就知道颜色了。即使最新版本的可以提供颜色,它也不必提供颜色。;-)ls
Drew

Answers:


68

似乎您的提示字符串($PS1)正在为字符设置粗体属性以使颜色更美观,而不是取消设置。从输出ls不知道这一点,确实没有设置粗体。因此,在输出的第一个颜色之后ls,一切看起来都变暗了。


1
是的,就是这样。$ PS1中的最后一个颜色更改设置为粗体+白色(1; 37)-谢谢!
比尔R

3
然后,您可以将其标记为已接受。
托马斯·迪基

0

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

前三行(直到蓝点)以红色打印。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.