根据 Makefile 规则打印粗体或彩色文本
Print bold or colored text from Makefile rule
我正在尝试打印以下 Makefile
中的粗体文本:
printf-bold-1:
@printf "normal text - \e[1mbold text\e[0m"
但是,转义序列按原样打印,所以当 运行 make printf-bold-1
时,我得到:
normal text - \e[1mbold text\e[0m
而不是预期的:
normal text - bold text
这很奇怪,因为我可以从我的终端打印粗体文本:运行 直接命令 printf "normal text - \e[1mbold text\e[0m"
产生,正如预期的那样:
normal text - bold text
在Makefile
中,我尝试用@echo
或echo
代替@printf
,或者打印\x1b
代替\e
, 但没有成功。
这里有一些描述我的环境的变量(Linux 使用标准 Gnome 终端),如果有帮助的话:
COLORTERM=gnome-terminal
TERM=xterm-256color
另请注意,在某些同事的笔记本电脑 (Mac) 上,粗体文本可以正确打印。
根据 Makefile
规则打印粗体或彩色文本的可移植方式是什么?
好的,我明白了。我应该使用 3
而不是 \e
或 \x1b
:
printf-bold-1:
@printf "normal text - 3[1mbold text3[0m"
或者,按照评论中的建议,使用单引号代替双引号:
printf-bold-1:
@printf 'normal text - \e[1mbold text\e[0m'
make printf-bold-1
现在生成 :
normal text - bold text
您应该使用通常的 tput
程序为实际终端生成正确的转义序列,而不是硬编码特定字符串(例如,在 Emacs 编译缓冲区中看起来很难看):
printf-bold-1:
@printf "normal text - `tput bold`bold text`tput sgr0`"
.PHONY: printf-bold-1
当然,你可以将结果存储到一个Make变量中,以减少子shell的数量:
bold := $(shell tput bold)
sgr0 := $(shell tput sgr0)
printf-bold-1:
@printf 'normal text - $(bold)bold text$(sgr0)'
.PHONY: printf-bold-1
我正在尝试打印以下 Makefile
中的粗体文本:
printf-bold-1:
@printf "normal text - \e[1mbold text\e[0m"
但是,转义序列按原样打印,所以当 运行 make printf-bold-1
时,我得到:
normal text - \e[1mbold text\e[0m
而不是预期的:
normal text - bold text
这很奇怪,因为我可以从我的终端打印粗体文本:运行 直接命令 printf "normal text - \e[1mbold text\e[0m"
产生,正如预期的那样:
normal text - bold text
在Makefile
中,我尝试用@echo
或echo
代替@printf
,或者打印\x1b
代替\e
, 但没有成功。
这里有一些描述我的环境的变量(Linux 使用标准 Gnome 终端),如果有帮助的话:
COLORTERM=gnome-terminal
TERM=xterm-256color
另请注意,在某些同事的笔记本电脑 (Mac) 上,粗体文本可以正确打印。
根据 Makefile
规则打印粗体或彩色文本的可移植方式是什么?
好的,我明白了。我应该使用 3
而不是 \e
或 \x1b
:
printf-bold-1:
@printf "normal text - 3[1mbold text3[0m"
或者,按照评论中的建议,使用单引号代替双引号:
printf-bold-1:
@printf 'normal text - \e[1mbold text\e[0m'
make printf-bold-1
现在生成 :
normal text - bold text
您应该使用通常的 tput
程序为实际终端生成正确的转义序列,而不是硬编码特定字符串(例如,在 Emacs 编译缓冲区中看起来很难看):
printf-bold-1:
@printf "normal text - `tput bold`bold text`tput sgr0`"
.PHONY: printf-bold-1
当然,你可以将结果存储到一个Make变量中,以减少子shell的数量:
bold := $(shell tput bold)
sgr0 := $(shell tput sgr0)
printf-bold-1:
@printf 'normal text - $(bold)bold text$(sgr0)'
.PHONY: printf-bold-1