私は地元の大学でUNIX/Linux入門コースを教えており、私の生徒の1人が次の質問をしました。
ディレクトリ内の一部のファイルが白く、その他が灰色なのはなぜですか?白は今日作成したもので、灰色は既存のファイルですか?
これを調べたとき、私は最初にLS_COLORS
変数に答えがあると思いましたが、さらに調査した結果、-l
スイッチと-al
スイッチをls
コマンド。次のスクリーンショットを参照してください。
ls -l
を使用すると、「3」という名前のファイルが白く表示されますが、-al
スイッチを使用すると、同じファイルが灰色で表示されます。
これはlsのバグですか、これがなぜ起こっているのか誰かが知っていますか?
プロンプト文字列($PS1
)は、文字にボールド属性を設定して色をより美しくし、unsettingではありません。 ls
からの出力はこれについて知らない、そしてdoes太字を解除します。 ls
の最初のカラー出力の後、すべてがより暗く見えます。
Lsの出力全体は、最後のactive色で出力されます。 ls
が色なしで呼び出された場合:
$ printf '\e[0;31m color test\n'; /bin/ls
color test
filea fileb filec filed filee filef fileg fileh
redでファイルのリストを出力します。
または、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
最初の3行(青い点まで)が赤で印刷されます。