Напечатайте жирный или цветной текст из правила Makefile - PullRequest
0 голосов
/ 04 января 2019

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

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

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

обычный текст - \ e [1-кратный текст \ 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 ]

0 голосов
/ 09 января 2019

Вы должны использовать обычную 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)'
0 голосов
/ 04 января 2019

Хорошо, я понял. Я должен был использовать \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 теперь производит:

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

...