web-dev-qa-db-ja.com

`ls`コマンドからの一貫性のない色出力

私は地元の大学でUNIX/Linux入門コースを教えており、私の生徒の1人が次の質問をしました。

ディレクトリ内の一部のファイルが白く、その他が灰色なのはなぜですか?白は今日作成したもので、灰色は既存のファイルですか?

これを調べたとき、私は最初にLS_COLORS変数に答えがあると思いましたが、さらに調査した結果、-lスイッチと-alスイッチをlsコマンド。次のスクリーンショットを参照してください。

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

using the -al switch the same file shows a gray

ls -lを使用すると、「3」という名前のファイルが白く表示されますが、-alスイッチを使用すると、同じファイルが灰色で表示されます。

これはlsのバグですか、これがなぜ起こっているのか誰かが知っていますか?

28
Bill R

プロンプト文字列($PS1)は、文字にボールド属性を設定して色をより美しくし、unsettingではありません。 lsからの出力はこれについて知らない、そしてdoes太字を解除します。 lsの最初のカラー出力の後、すべてがより暗く見えます。

68
Thomas Dickey

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行(青い点まで)が赤で印刷されます。

0
Isaac