Напечатайте жирный или цветной текст из правила Makefile

Я пытаюсь напечатать жирный текст из следующих Makefile:

printf-bold-1:
    @printf "normal text - \e[1mbold text\e[0m"

Но escape-последовательности печатаются как есть, поэтому при запуске make printf-bold-1, Я получил:

обычный текст - \e[1mbold текст \e[0m

Вместо ожидаемого:

обычный текст - жирный текст

Это странно, потому что я могу печатать жирный текст с моего терминала: запуск команды напрямую printf "normal text - \e[1mbold text\e[0m" производит, как и ожидалось:

обычный текст - жирный текст

в MakefileЯ пытался использовать @echo или же echo вместо @printfили распечатать \x1b вместо \e, но безуспешно.

Вот некоторые переменные, описывающие мою среду (Linux со стандартным терминалом Gnome), если это может помочь:

COLORTERM=gnome-terminal
TERM=xterm-256color

Также обратите внимание, что на некоторых ноутбуках коллег (Mac) жирный текст печатается правильно.

Каков портативный способ, работающий в любой среде, печатать жирный или цветной текст с Makefile править?

2 ответа

Решение

Вы должны использовать обычный tput программа для создания правильных escape-последовательностей для фактического терминала, а не для жесткого кодирования конкретных строк (которые, например, выглядят ужасно в буфере компиляции Emacs):

printf-bold-1:
    @printf "normal text - `tput bold`bold text`tput sgr0`"

Конечно, вы можете сохранить результат в переменной Make, чтобы уменьшить количество подоболочек:

bold := $(shell tput bold)
sgr0 := $(shell tput sgr0)

printf-bold-1:
    @printf 'normal text - $(bold)bold text$(sgr0)'

Ладно, я понял. Я должен был использовать \033 вместо \e или же \x1b:

printf-bold-1:
    @printf "normal text - \033[1mbold text\033[0m"

Или, как предлагается в комментариях, используйте простые кавычки вместо двойных кавычек:

printf-bold-1:
    @printf 'normal text - \e[1mbold text\e[0m'

make printf-bold-1 сейчас производит:

обычный текст - жирный текст

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