答案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
前三行(直到蓝点)以红色打印。