Как напечатать стандартную ошибку красным

14

Как я могу напечатать стандартную ошибку красного цвета в консоли вместо того же цвета стандартного вывода?

Возможно ли использовать Gnome Terminal ?

Aslan986
источник
Эта ссылка может вам помочь
devav2
Вы можете включить это поведение для одной команды с помощью hiliteутилиты . hiliteЧтобы использовать ее, вы должны вручную добавить команду командной оболочки, но это все еще полезно, если вы знаете или подозреваете, что команда выводит ошибки, и вы хотите их обнаружить.
Рори О'Кейн

Ответы:

8

Я использую stderred и нашел хорошее решение. Как примечания readme :

Stderred перехватывает write () и семейство потоковых функций (fwrite, fprintf, error ...) из 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). В качестве альтернативы, чтобы войти в escape напрямую, нажмите 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
    

Stderr из программ будет окрашен в красный цвет.

январь
источник
есть ли способ сделать его цветным для любого сообщения об ошибке из любой программы?
Лука