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 ?
hilite
hilite
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 ?
hilite
hilite
Yanıtlar:
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.so
derleme 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 .bashrc
ve terminali yeniden başlatın.
Varolmayan dosyalar üzerinde test edilen sonuçlar ( farklı ortam ayarlandığında sudo
kullanıcı .bashrc
okunmayacağı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 )
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"
-e
Bö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 ):
Bir işlev tanımlayın (.bashrc dosyanıza koyabilirsiniz):
color() { "$@" 2>&1>&3|sed 's,.*,\x1B[31m&\x1B[0m,'>&2; } 3>&1
Bunun gibi programları başlatın:
color program
Programlardan gelen stderr kırmızı renk alacaktır.