“ls”命令的颜色输出不一致

“ls”命令的颜色输出不一致

我在当地一所大学教授 UNIX/Linux 简介课程,我的一个学生问了以下问题:

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

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

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

使用 -al 开关相同的文件显示灰色

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

这是 ls 中的错误还是有人知道为什么会发生这种情况?

答案1

看起来好像你的提示字符串($PS1)正在对字符设置粗体属性以使颜色更好,而不是取消设置它。输出来自ls不知道这件事,并且取消设置粗体。所以在第一个颜色输出之后ls,一切看起来都黯淡了。

答案2

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

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

相关内容