Nasıl 'daha az' çıkış renkleri yapabilirim?

20

Bir program çalıştırdığımda (örneğin, grep veya ls ) bir çağrı cihazı olmadan, çıkışı renklidir. Ancak, çalıştırdığımda, çıktıyı less değerine pipetliyorsa, hiçbir renk gösterilmiyor.

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

grep -r something

ancak bu yapılmaz:

grep -r something | less

Neden? Renkleri less yoluyla nasıl görebilirim?

    
sordu Mohammad Reza Rezwani 13.06.2014 15:57

2 cevap

31

Burada iki sorun var:

  • Renk desteğini otomatik olarak algılayan ls gibi komutlar - borulardan destek bulamıyor
  • less , varsayılan olarak renk kodlarını gösterecek şekilde ayarlandı.

Her ikisi de üstesinden gelinebilir ama biraz rahatsız edici:

ls --color=always | less -R

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

Biraz daha derinlemesine bir cevap ls 'sinin STDOUT'unun gerçek bir terminale ait olup olmadığını kontrol etmesidir. İşleri etrafa pipettiğinizde STDOUT, bir sonraki komutun STDIN'ine ayarlanır.

Bunu işte ls kaynak kodunda görebilirsiniz . Durumun ne olduğunu öğrenmek için isatty komutunu (çekirdek POSIX arabirimi) kullanıyor:

  • Renkler varsayılan olarak açık:

        print_with_color = (i == color_always
                            || (i == color_if_tty
                                && isatty (STDOUT_FILENO)));
    
  • Birden çok sütunda çıktı almaya ç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 , açıkça geçersiz kılmadığı sürece, benzer bir şeyi yapar; isatty ile renk desteğini algılar:

color_option = isatty (STDOUT_FILENO) && should_colorize ();
    
verilen cevap Oli 13.06.2014 16:49
2

Renklerle less daha fazla ilgileniyorsanız, lesspipe.sh dosyasına bakmak isteyebilirsiniz. Örneğin, bkz. İşte .

  

lesspipe.sh, daha azın man sayfasında açıklandığı gibi, çağrı cihazı için bir giriş filtresidir. Komut, ksh uyumlu bir kabuk altında çalışır (ör. 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.

Ayrıca, bir metin editörüne benzer şekilde kabuk betiklerini, perl betiklerini vb. renklendirir, ancak renklendirmeyi yapmak için herhangi bir "önişleme" programının kullanılmasına gerek kalmaz.

    
verilen cevap DaveEmme 13.06.2014 21:11

Etiketlerdeki diğer soruları oku