Напечатайте жирный или цветной текст из правила 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
сейчас производит:
обычный текст - жирный текст