Pertanyaan Cara mencetak kesalahan standar dalam warna merah


Bagaimana saya bisa mencetak kesalahan standar dalam warna merah ke konsol bukannya menggunakan warna yang sama dari output standar?

Apakah mungkin menggunakan Gnome Terminal ?


13
2017-09-17 17:34


asal


Ini link mungkin membantu Anda - devav2
Anda dapat mengaktifkan perilaku ini untuk satu perintah menggunakan itu hilite utilitas. Anda harus secara manual menambahkan hilite ke perintah shell Anda untuk menggunakannya, tetapi masih berguna jika Anda tahu atau menduga bahwa perintah mengeluarkan kesalahan dan Anda ingin menempatkannya. - Rory O'Kane


Jawaban:


Saya menggunakan stderred dan telah menemukannya sebagai solusi yang baik. Seperti itu Baca aku catatan:

Kait stderred pada write () dan keluarga fungsi stream (fwrite, fprintf, error ...) dari libc untuk mewarnai semua output stderr yang masuk ke terminal sehingga membuatnya dapat dibedakan dari stdout. Pada dasarnya ini membungkus teks yang masuk ke file dengan deskriptor "2" dengan kode escape ANSI yang tepat membuat teks merah.

Ini diimplementasikan sebagai pustaka bersama dan tidak memerlukan kompilasi ulang binari yang ada berkat fitur preload / insert dari dynamic linker.

Ini didukung di Linux (dengan LD_PRELOAD), FreeBSD (juga LD_PRELOAD) dan OSX (dengan DYLD_INSERT_LIBRARIES).

Ini mudah untuk dikompilasi, tetapi Anda perlu membangunnya dari sumber dengan mengikuti instruksi dari situs Github-nya:

sudo apt-get install build-essential git cmake 

Kemudian

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

Kemudian

make

Bagian terpenting dari itu adalah menambahkan baris yang tepat untuk Anda .bashrc; Anda harus menaut ke libstderred.so file di direktori pembangunan; Anda harus menggunakan path absolut di mana direktori build adalah (/ home / mike / src / stderred / build). Saya menambahkan yang berikut ini ke saya .bashrc:

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

Tentunya, ketika Anda tidak ingin menggunakannya lagi, hapus baris di atas dari Anda .bashrc dan nyalakan kembali terminal.

Hasilnya, diuji pada file yang tidak ada (itu jelas tidak akan berfungsi kapan sudo digunakan, sebagai pengguna .bashrc tidak akan dibaca ketika lingkungan yang berbeda diatur):

(Ngomong-ngomong tidak mengubah duke saya @ nukem menjadi merah saat itu merah sudah)

enter image description here


7
2017-09-17 18:42





Secara umum ya, karena Gnome Terminal adalah terminal ANSI dan mendukung kode pelarian standar ANSI.

Berikut ini contohnya. Ketik ini di terminal Anda:

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

Itu -e pilihan memungkinkan untuk menafsirkan kode backslash, sehingga \e menjadi "Esc" (kode hex 0x1B). Atau, untuk langsung masuk, tekan ctrl-V  ESC:

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

Escape dan [ keduanya membentuk kode yang dikenali oleh terminal. Setelah urutan itu, Anda perlu memasukkan titik dua (;) daftar atribut yang dipisahkan, diakhiri oleh m. Lihat sini untuk semua kode. Contohnya termasuk atribut 0 (reset semua atribut, karena Anda mungkin memperhatikan di atas itu adalah urutan yang mengakhiri contoh saya) dan sekelompok gaya (digarisbawahi, terang, tebal dll) serta beberapa atribut warna.

Jawaban di atas memberi tahu Anda cara menggunakan warna ketika Anda menulis program Anda sendiri.

Namun, jika saya memahami pertanyaan Anda dengan benar, Anda ingin memiliki pemisahan visual untuk stderr dan stdout dari setiap program yang Anda jalankan. Ini tidak langsung tanpa menguraikan hasilnya melalui filter. Berikut ini contohnya (ditemukan sini) Bagaimana cara melakukannya:

  1. Definisikan sebuah fungsi (Anda dapat menempatkannya di file .bashrc Anda):

    color() { "$@" 2>&1>&3|sed 's,.*,\x1B[31m&\x1B[0m,'>&2; } 3>&1
    
  2. Mulai program seperti ini:

    color program
    

Stderr dari program akan berwarna merah.


4
2017-09-17 18:37