J'enseigne un cours d'introduction à UNIX/Linux dans un collège local et l'un de mes étudiants a posé la question suivante:
Pourquoi certains fichiers de mon répertoire sont-ils blancs et d'autres gris? Les blancs sont-ils ceux que j'ai créés aujourd'hui et les gris sont des fichiers existants?
En examinant cela, j'ai d'abord pensé que la réponse serait dans le LS_COLORS
variable, mais une enquête plus approfondie a révélé que les listes de couleurs étaient différentes lors de l'utilisation de -l
interrupteur contre -al
basculez avec la commande ls
. Voir les captures d'écran suivantes:
En utilisant ls -l
le fichier nommé '3' apparaît en blanc mais en utilisant le -al
changer le même fichier montre un gris.
Est-ce un bug dans ls ou quelqu'un sait-il pourquoi cela se produit?
Il semble que votre chaîne d'invite ($PS1
) définit l'attribut bold sur les caractères pour rendre les couleurs plus agréables, et non désarmant . La sortie de ls
ne sait rien à ce sujet, et le fait non mis en gras. Ainsi, après la première sortie couleur de ls
, tout semble plus sombre.
La sortie entière de ls sera imprimée dans la dernière couleur active. Si ls
est appelé sans couleur:
$ printf '\e[0;31m color test\n'; /bin/ls
color test
filea fileb filec filed filee filef fileg fileh
affichera la liste des fichiers en rouge.
Ou, si aucun changement de couleur n'est nécessaire pour ls, la dernière couleur restera:
$ 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
Pourtant, tout en rouge.
Mais, dès que ls
doit définir une couleur (puis réinitialiser les couleurs à celles par défaut utilisées par la console), la couleur utilisée à partir de ce moment sera la console par défaut.
$ 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
Avec les trois premières lignes (jusqu'au point bleu) imprimées en rouge.