`Ls` komutundan tutarsız renk çıktısı


28

Yerel bir kolejde UNIX / Linux kursuna giriş dersi veriyorum ve öğrencilerimden biri aşağıdaki soruyu sordu:

Dizinimdeki bazı dosyalar neden beyaz, diğerleri gri? Bugün oluşturduğumların beyazları ve gri olanları mevcut dosya mı?

Buna baktığımda ilk önce cevabın LS_COLORSdeğişkende olacağını düşünmüştüm , ancak ilerideki araştırmalar, -lanahtarın yerine -alanahtarın lskomutla kullanılmasında renk listelerinin farklı olduğunu ortaya koydu . Aşağıdaki ekran görüntülerine bakın:

ls -l kullanarak '3' isimli dosya beyaz

-al anahtarını kullanarak aynı dosya gri

ls -l'3' isimli dosyayı kullanmak beyaz olarak gösterir, ancak -aldüğmeyi kullanarak aynı dosyayı gri gösterir.

Bu, ls'de bir hata mı yoksa bunun neden olduğunu bilen var mı?


Soru başlığınıza göre: bu renklendirmenin lskomutun kendisiyle ilgisi yoktur .
Drew

FWIW, LS_COLORS ile uğraşırken LS_COLORS='rs=0;1' ls -lbuna en yakını bulabilirsin , ama çok farklı görünüyor.
Wjandrea

4
@ Problemi araştırdıktan sonra bunu sadece siz biliyorsunuz. Açıkçası lsçıktısının rengini değiştirebilir.
boru

@pipe: Hayır, çok önce renk olduğunu biliyorum. O gerekmez son versiyonları bile, renk sağlamak ls için renk sağlar. ;-)
Drew,

Yanıtlar:


68

Senin istemi-dizeniniz ( $PS1), renkleri daha güzel hale getirmek için karakterlerin üzerine koyu bir nitelik koyuyormuş gibi görünüyor. Çıktısı lsbundan haberi ve yok mu cesur tanımı kaldırılır. Böylece ilk renk çıktısından sonra lsher şey daha kısık görünüyor.


1
Evet, öyleydi. $ PS1'deki son renk değişimi kalın + beyaz (1; 37) olarak ayarlandı - Teşekkürler!
Bill R,

3
Öyleyse kabul ettiğinizi işaretleyebilirsiniz.
Thomas Dickey

0

Tüm çıktılar son aktif renkte basılacaktır . Eğer lsrenk olmadan denir:

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

kırmızı dosya listesini yazdırır .

Veya, ls için gerekli bir renk değişikliği yoksa, son renk kalacaktır:

$ 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

Yine de hepsi kırmızı.

Ancak, lsbir renk ayarlaması gerektiğinde (ve sonra renkleri konsol tarafından kullanılan varsayılan değere sıfırlayın), o zamandan itibaren kullanılan renk konsol varsayılanı olacaktır.

$ 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

İlk üç satır (mavi noktaya kadar) kırmızı renkte basıldığında.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.