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

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

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

14
задан 17 September 2012 в 21:34

2 ответа

В общем, да, поскольку терминал Gnome является терминалом 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):

    [ 112]
  2. Запустите такие программы:

    color program
    

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

0
ответ дан 17 September 2012 в 21:34

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

Stderred перехватывает write () и семейство потоковых функций (fwrite, fprintf, error ...) из libc для раскрашивания всех stderr вывод, который идет на терминал, что делает его отличным от стандартного вывода. В основном он переносит текст, который идет в файл с дескриптором «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 не будет прочитан, когда установлена ​​другая среда):

( Кстати, он не переворачивает мою подсказку duke @ nukem красным, поскольку она уже была красной )

enter image description here

0
ответ дан 17 September 2012 в 21:34

Другие вопросы по тегам:

Похожие вопросы: