我正在尝试从以下Makefile
中打印粗体文本:
printf-bold-1:
@printf "normal text - \e[1mbold text\e[0m"
但是,转义序列按原样打印,因此在运行make printf-bold-1
时,我得到了:
普通文字-\ e [1mbold text \ e [0m
而不是预期的:
普通文本-粗体
这很奇怪,因为我可以在终端上打印粗体文本:直接运行命令printf "normal text - \e[1mbold text\e[0m"
会产生预期的结果:
普通文本-粗体
在Makefile
中,我尝试使用@echo
或echo
代替@printf
,或者打印\x1b
代替\e
,但是没有成功。
如果可以,以下是一些描述我的环境的变量(带有标准Gnome终端的Linux):
COLORTERM=gnome-terminal
TERM=xterm-256color
还请注意,在某些同事的笔记本电脑(Mac)上,正确打印了粗体文本。
在每种环境下使用Makefile
规则打印粗体或彩色文本的可移植方式是什么?
答案 0 :(得分:1)
您应该使用常规的tput
程序为实际终端生成正确的转义序列,而不是对特定的字符串进行硬编码(例如,在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)'
答案 1 :(得分:0)
好,知道了。我应该使用\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
现在产生:
普通文本-粗体