Як надрукувати стандартну помилку червоним кольором


14

Як я можу надрукувати стандартну помилку червоним кольором на консолі замість того, щоб використовувати той самий колір стандартного виводу?

Чи можливо за допомогою терміналу Gnome ?


Це посилання може допомогти вам
devav2

Ви можете ввімкнути цю поведінку для однієї команди за допомогою hiliteутиліти . Вам потрібно вручну додати hiliteкоманду оболонки, щоб використовувати її, але вона все ще корисна, якщо ви знаєте чи підозрюєте, що команда видає помилки і ви хочете їх знайти.
Rory O'Kane

Відповіді:


8

Я використовую жорсткіші і вважаю це гарним рішенням. Як зазначається у читанні :

Штрихові гачки на write () та сімейство потокових функцій (fwrite, fprintf, помилка ...) від libc, щоб розфарбувати весь вихідний продукт stderr, що йде до терміналу, завдяки чому він відрізняється від stdout. В основному він обертає текст, який іде до файлу з дескриптором "2" з належними кодами аварійних відхилень ANSI, що робить текст червоним.

Він реалізований як спільна бібліотека і не вимагає перекомпіляції існуючих бінарних файлів завдяки функції попереднього завантаження / вставки динамічних лінкерів.

Він підтримується в Linux (з LD_PRELOAD), FreeBSD (також LD_PRELOAD) та OSX (з DYLD_INSERT_LIBRARIES).

Складати це просто, але вам потрібно створити його з джерела, дотримуючись інструкцій з його сайту Github :

sudo apt-get install build-essential git cmake 

Потім

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

Потім

make

Найважливіша його частина - додати відповідний рядок до свого .bashrc; ви повинні посилатися на libstderred.soфайл у каталозі збірки; ви повинні використовувати абсолютний шлях, де знаходиться каталог збірки (/ home / mike / src / stderred / build). Я додаю наступне до свого .bashrc:

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

Очевидно, коли ви більше не хочете ним користуватися, видаліть вищезгаданий рядок зі свого .bashrcта перезапустіть термінал.

Результати, протестовані на неіснуючих файлах (він, очевидно, не буде працювати при sudoвикористанні, оскільки користувач .bashrcне буде прочитаний, коли встановлено інше середовище):

(До речі , це НЕ повертає герцог @ Nukem швидких червоний , як було червоним вже )

введіть тут опис зображення


Не можу повірити, що я пройшов стільки років, не знаючи, що це існує! Це надзвичайно корисно і до цього часу повинно було бути частиною ОС, о, сто років або більше. :)
Роджер Даль

6

Загалом, так, оскільки Gnome Terminal є ANSI-терміналом і підтримує стандартні коди виходу ANSI.

Ось приклад. Введіть це у свій термінал:

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

-eОпція дозволяє інтерпретувати коди зворотної косої межі, так що \eстає «Esc» (шістнадцятковий код 0x1B). Крім того, щоб ввести вхід безпосередньо, натисніть ctrl-V Esc:

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

Escape і [обидва утворюють разом код, який розпізнається терміналом. Після цієї послідовності вам потрібно вставити ;розділений двокрапкою ( ) список атрибутів, який закінчується m. Дивіться тут усі коди. Приклади включають атрибут 0(скиньте всі атрибути, як ви могли помітити вище, це послідовність, яка припиняє мій приклад) та купу стилю (підкреслений, яскравий, жирний тощо), а також кілька кольорових атрибутів.

Відповідь вище розповідає, як використовувати колір під час написання власної програми.

Однак якщо я правильно розумію ваше запитання, ви хочете мати візуальний поділ на stderr та stdout будь-яких програм, які ви запускаєте. Це не зрозуміло без аналізу їх результатів через фільтр. Ось приклад (знайдений тут ), як це зробити:

  1. Визначте функцію (ви можете помістити її у свій .bashrc файл):

    color() { "$@" 2>&1>&3|sed 's,.*,\x1B[31m&\x1B[0m,'>&2; } 3>&1
    
  2. Запускайте такі програми:

    color program
    

Більш жорсткий від програм стане кольоровим червоним.


чи все-таки можна зробити кольоровим будь-яке повідомлення про помилку з будь-якої програми?
Лука
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.