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

Иногда выдает вывод на экран. Немного сложно идентифицировать все строки предупреждений и сообщений об ошибках. Я знаю, может ли выход цвета оболочки может помочь Может ли кто-нибудь мне помочь?

Ответ 1

Посмотрите colormake, найдите здесь

$ apt-cache search colormake
colormake - simple wrapper around make to colorize output

Используя силу google, я также нашел эту bash -функцию.

make()
{
  pathpat="(/[^/]*)+:[0-9]+"
  ccred=$(echo -e "\033[0;31m")
  ccyellow=$(echo -e "\033[0;33m")
  ccend=$(echo -e "\033[0m")
  /usr/bin/make "[email protected]" 2>&1 | sed -E -e "/[Ee]rror[: ]/ s%$pathpat%$ccred&$ccend%g" -e "/[Ww]arning[: ]/ s%$pathpat%$ccyellow&$ccend%g"
  return ${PIPESTATUS[0]}
}

Ответ 2

Я пришел к этим вопросам, ища решение для раскраски make вывода, а затем вспомнил какое-то время назад. Я исследовал хороший генератор цветных журналов и нашел ccze. Он работает со всем, что я бросаю в него из журналов сервера Minecraft в Exim MTA.

make | ccze -A

ПРИМЕЧАНИЕ: указание опции "-A" включает "raw-ansi", иначе какой-то вывод "очищается" в конце запуска по моему опыту. enter image description here

Ответ 3

Если вы являетесь пользователем emacs, вы можете использовать команду M-x compile. Это помещает вывод make в выделенный буфер, при этом ошибки действуют как ссылки на соответствующую строку в исходном коде.

Ответ 4

Просто еще одна функция bash, очень сжатая

make()
{
                                /usr/bin/make "[email protected]" 2>&1 | sed -E -e "s/error/ $(echo -e "\\033[31m" ERROR "\\033[0m"/g)"   -e "s/warning/ $(echo -e "\\033[0;33m" WARNING "\\033[0m"/g)"
                                                                return ${PIPESTATUS[0]}
}

Ответ 5

Как насчет следующего?

цветной вывод make

Он создается упрощенной версией этого Makefile.

PROJECT = programname
SHELL   = /bin/bash
OBJS    = $(patsubst src/%.cc,obj/%.o,$(wildcard src/*.cc))

RESET          = \033[0m
make_std_color = \033[3$1m      # defined for 1 through 7
make_color     = \033[38;5;$1m  # defined for 1 through 255
WRN_COLOR = $(strip $(call make_std_color,3))
ERR_COLOR = $(strip $(call make_std_color,1))
STD_COLOR = $(strip $(call make_color,8))

COLOR_OUTPUT = 2>&1 |                                   \
    while IFS='' read -r line; do                       \
        if  [[ $$line == *:[\ ]error:* ]]; then         \
            echo -e "$(ERR_COLOR)$${line}$(RESET)";     \
        elif [[ $$line == *:[\ ]warning:* ]]; then      \
            echo -e "$(WRN_COLOR)$${line}$(RESET)";     \
        else                                            \
            echo -e "$(STD_COLOR)$${line}$(RESET)";     \
        fi;                                             \
    done; exit $${PIPESTATUS[0]};

.PHONY: $(PROJECT)

$(PROJECT): bin/$(PROJECT)

bin/$(PROJECT): $(OBJS)
    @mkdir -p bin
    @echo g++ -o [email protected] $(OBJS) -Iinclude
    @g++ -o [email protected] $(OBJS) -Iinclude $(COLOR_OUTPUT)

obj/%.o: src/%.cc
    @mkdir -p obj
    @echo g++ -o [email protected] -c $< -Wall -Wextra
    @g++ -o [email protected] -c $< -Wall -Wextra $(COLOR_OUTPUT)

Предполагается, что все исходные файлы С++ находятся в каталоге src (extention.cc), а файлы заголовков находятся в каталоге include.

Ответ 6

Я использовал multitail для файлов журналов, которые могут выделять (и фильтровать) строки на основе различных критериев.