Standart hata kırmızı olarak nasıl yazdırılır


14

Standart çıktının aynı rengini kullanmak yerine standart hatayı konsola nasıl kırmızı olarak yazdırabilirim?

Gnome Terminali kullanmak mümkün müdür ?


Bu bağlantı size yardımcı olabilir
devav2

Sen kullanarak tek komut için bu davranışı etkinleştirebilirsiniz yarar . Kabuk komutunuzu kullanmak için el ile başa eklemelisiniz , ancak bir komutun hata verdiğini biliyorsanız veya şüphelendiğinizde ve bunları bulmak istediğinizde hala yararlıdır. hilitehilite
Rory O'Kane

Yanıtlar:


8

Ben kullanın stderred ve ona iyi bir çözüm bulduk. Onun gibi beni oku notları:

Terminale giden tüm stderr çıkışlarını renklendirmek ve böylece stdout'tan ayırt edilebilir hale getirmek için libc'den write () ve stendred kancaları (fwrite, fprintf, error ...). Temelde, doğru ANSI kaçış kodları ile metni kırmızıya dönüştüren tanımlayıcı "2" ile dosyaya giden metni sarar.

Paylaşılan bir kütüphane olarak uygulanır ve dinamik bağlayıcıların önyükleme / ekleme özelliği sayesinde mevcut ikili dosyaların yeniden derlenmesini gerektirmez.

Linux (LD_PRELOAD ile), FreeBSD (ayrıca LD_PRELOAD) ve OSX (DYLD_INSERT_LIBRARIES ile) üzerinde desteklenir.

Derlemek kolaydır, ancak Github sitesindeki talimatları izleyerek onu kaynaktan oluşturmanız gerekir :

sudo apt-get install build-essential git cmake 

Sonra

git clone git://github.com/sickill/stderred.git
cd stderred

Sonra

make

Bunun en önemli kısmı, uygun satırı sizin yerinize eklemektir .bashrc. libstderred.soderleme dizinindeki dosyaya bağlanmanız gerekir ; derleme dizininin olduğu mutlak yolu kullanmalısınız (/ home / mike / src / stderred / build). Şunlara şunu ekliyorum .bashrc:

export LD_PRELOAD="/home/mike/src/stderred/build/libstderred.so${LD_PRELOAD:+:$LD_PRELOAD}"

Açıkçası, artık kullanmak istemediğinizde, yukarıdaki satırı kendinizden kaldırın .bashrcve terminali yeniden başlatın.

Varolmayan dosyalar üzerinde test edilen sonuçlar ( farklı ortam ayarlandığında sudokullanıcı .bashrcokunmayacağından , kullanıldığında açıkça çalışmaz ):

(Bu arada o değil benim Dük çevirmek @ nukem istemi kırmızı olduğu kırmızı gibi zaten )

resim açıklamasını buraya girin


Bunun var olduğunu bilmeden uzun yıllar gittiğime inanamıyorum! İnanılmaz derecede kullanışlı ve şimdiye kadar yüz yıl kadar işletim sisteminin bir parçası olmalıydı. :)
Roger Dahl

6

Genel olarak evet, çünkü Gnome Terminali bir ANSI terminalidir ve standart ANSI kaçış kodlarını destekler.

İşte bir örnek. Bunu terminalinize yazın:

echo -e "\e[01;31mREDRUM\e[0m"

-eBöylece seçenek, ters eğik çizgi kodlarını yorumlamak için izin verir \e"Esc" (onaltılık kodu 0x1B'dir) olur. Alternatif olarak, doğrudan kaçış girmek için tuşuna basın ctrl-V Esc:

echo  "^[[01;31mREDRUM^[[0m"

Escape ve [her ikisi de terminal tarafından tanınan kodu oluşturur. Bu diziden sonra ;, ile sonlandırılmış iki nokta üst üste ( ) ayrılmış öznitelik listesi eklemeniz gerekir m. Tüm kodlar için buraya bakın . Örnekler arasında öznitelik 0(örneğimi sonlandıran sekans olan yukarıda fark edebileceğiniz gibi tüm nitelikleri sıfırla) ve bir grup stil (altı çizili, parlak, kalın vb.) Ve birkaç renk özelliği bulunur.

Yukarıdaki cevap, kendi programınızı yazarken renkleri nasıl kullanacağınızı anlatır.

Ancak, sorunuzu doğru bir şekilde anlarsam, çalıştırdığınız programların stderr ve stdout'ları için görsel bir ayırma yapmak istersiniz. Bu, bir filtre aracılığıyla çıktılarını ayrıştırmak kolay değildir. Nasıl yapılacağına dair bir örnek ( burada bulunur ):

  1. Bir işlev tanımlayın (.bashrc dosyanıza koyabilirsiniz):

    color() { "$@" 2>&1>&3|sed 's,.*,\x1B[31m&\x1B[0m,'>&2; } 3>&1
    
  2. Bunun gibi programları başlatın:

    color program
    

Programlardan gelen stderr kırmızı renk alacaktır.


herhangi bir programdan herhangi bir hata mesajı renklendirmek için yine de var mı?
Luke
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.