Çıktı renklerini nasıl daha az yapabilirim?


25

Çağrı cihazı olmayan bir programı (örneğin grepveya ls) çalıştırdığımda , çıktısı renkli. Bununla birlikte, çıktısını boruyla çalıştırdığımda lesshiçbir renk gösterilmez.

Örneğin, bu komut renkli çıktı verir:

grep -r something

ama bu değil:

grep -r something | less

Niye ya? Renkleri nasıl görebilirim less?


5
grep --color=always "search string" * | less -Rama mostbugünlerde kullanma eğilimindeyim less. Ayrıca: gnu.org/software/src-highlite renk vurgulayıcıdır (daha az işe
yarar

@alex yüklediniz python-pygmentsmi?
souravc

@ souravc hayır ben bunu yüklemedim
Mohammad Reza Rezwani

@ beni görmezden geliyor? >: - D
Rinzwind

Yanıtlar:


36

Burada iki problem mevcut:

  • lsRenk desteğini otomatik algılayan - gibi komutlar borulardan destek bulamıyor
  • less varsayılan olarak sadece renk kodlarını gösterecek şekilde ayarlanmıştır.

Her ikisi de üstesinden gelinebilir ama biraz dağınık:

ls --color=always | less -R

Bu lsbelirli değil . Rengi destekleyen birçok komutun da geçersiz kılma argümanı vardır.


Biraz daha derinlemesine bir cevap lsSTDOUT'un gerçek bir terminale ait olup olmadığını kontrol etmektir. Etrafınızdakileri pipoladığınızda, STDOUT bir sonraki komutun STDIN değerine ayarlanır.

İş yerinde görebilirsiniz içinde lskaynak kodu . isattyDurumun ne olduğunu bulmak için bu komutu (çekirdek POSIX arayüzü) kullanıyor:

  • Renkler varsayılan olarak açıktır:

        print_with_color = (i == color_always
                            || (i == color_if_tty
                                && isatty (STDOUT_FILENO)));
    
  • Birden çok sütuna çıktı vermeye çalışıyor muyuz:

    if (format == long_format)
      format = (isatty (STDOUT_FILENO) ? many_per_line : one_per_line);
    
    //...
    
    if (isatty (STDOUT_FILENO))
      {
        format = many_per_line;
        set_quoting_style (NULL, shell_escape_quoting_style);
        qmark_funny_chars = true;
      }
    else
      {
        format = one_per_line;
        qmark_funny_chars = false;
      }
    

grepçok benzer bir şey yapar, açıkça geçersiz kılmadıkça, renk desteğini algılar isatty:

color_option = isatty (STDOUT_FILENO) && should_colorize ();

1
100k için seni desteklemek için bugünkü son oyum (sınıra ulaştı). Ama ben ve Rinzwind bu olduğunda kek istiyoruz.
hytromo

Ad-ack-grep isimli bir program indirdim. ack-grep foo yazdığınızda, tüm alt dizinlerde foo arayacaktır. Bu yüzden ack-grep foo | az ve renkler gitti. Fakat bu program desteklemiyor gibi görünüyor - "- color = always", yardım için ne gerekiyorsa
Mohammad Reza Rezwani

1
@alex ack tartışıyor --color:ack-grep -i select --color | less -R
Oli

@Oli ......... Oh aman Tanrım ........ bilgin ve yardımın ve ayrıca
linux'un

1
@ B1KMusic Katılıyorum. O kadar katılıyorum ki, nasıl çalıştığını ve cevabı nasıl güncellediğimi buldum Sütunları bir -Cargümanla zorlayabilirsiniz .
Oli

2

lessDaha genel olarak renklerle ilgileniyorsanız, bakmak isteyebilirsiniz lesspipe.sh. Örneğin, http://freecode.com/projects/lesspipe adresini ziyaret edin .

lesspipe.sh, daha az man sayfasında açıklandığı gibi çağrı cihazı için bir giriş filtresidir. Betik, ksh uyumlu bir kabuk altında çalışır (örn. Bash, zsh) ve ikili içerikli, sıkıştırılmış dosyalar, arşivler ve arşivlerde bulunan dosyaları görüntülemek için daha az kullanmanıza izin verir.

Aynı zamanda kabuk metinlerini, perl komut dosyalarını vb. Bir metin editörüne benzer şekilde renklendirir, ancak renklendirme yapmak için herhangi bir "ön işleme" programı kullanmadan.

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.