it-swarm.com.de

Inkonsistente Farbausgabe vom Befehl `ls`

Ich unterrichte eine Einführung in UNIX/Linux an einem örtlichen College und einer meiner Schüler stellte die folgende Frage:

Warum sind einige Dateien in meinem Verzeichnis weiß und andere grau? Sind die weißen die, die ich heute erstellt habe, und die grauen sind vorhandene Dateien?

Als ich mir das anschaute, dachte ich zuerst, dass die Antwort in der Variablen LS_COLORS Liegen würde, aber weitere Untersuchungen ergaben, dass die Farblisten bei Verwendung des Schalters -l Im Vergleich zum Schalter -al Unterschiedlich waren. Wechseln Sie mit dem Befehl ls. Siehe folgende Screenshots:

(using ls -l the file named '3' shows as white

(using the -al switch the same file shows a gray

Bei Verwendung von ls -l Wird die Datei mit dem Namen '3' weiß angezeigt, bei Verwendung des Schalters -al Wird dieselbe Datei grau angezeigt.

Ist das ein Fehler in ls oder weiß jemand, warum dies passiert?

28
Bill R

Es sieht so aus, als ob Ihr Prompt-String ($PS1) setzt das fettgedruckte Attribut auf Zeichen, um die Farben schöner zu machen, und nicht das Setzen . Die Ausgabe von ls weiß nichts davon, und weiß nicht fett gesetzt. Nach der ersten Farbausgabe von ls sieht also alles dunkler aus.

68
Thomas Dickey

Die gesamte Ausgabe von ls wird in der letzten Farbe aktiv gedruckt. Wenn ls ohne Farbe aufgerufen wird:

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

druckt die Liste der Dateien in rot.

Wenn für ls keine Farbänderung erforderlich ist, bleibt die letzte Farbe erhalten:

$ 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

Trotzdem alles in rot.

Sobald jedoch ls eine Farbe festlegen muss (und dann die Farben auf die von der Konsole verwendete Standardeinstellung zurücksetzen muss), ist die von nun an verwendete Farbe die Standardkonsole.

$ 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

Die ersten drei Zeilen (bis zum blauen Punkt) werden rot gedruckt.

0
Isaac