0

我有一个Makefile颜色tput变量

_OFF := $(shell tput sgr0)
BG_RED := $(shell tput setab 1)

$(info TERM1=${BG_RED}${TERM}${_OFF}_xxx)

all:
    @echo TERM2=${BG_RED}${TERM}${_OFF}_xxx

第二个提示会报错

/bin/sh: -c: line 0: syntax error near unexpected token `('
/bin/sh: -c: line 0: `echo TERM2=xterm-256color_xxx'
make: *** [all] Error 2

有意思的是,它竟然报错了,但是xterm-256colorerror message里的word/bin/sh: -c: line 0: `echo TERM2=xterm-256color_xxx'` 居然是红色的底色,下面_xxx是正常的底色。

它是一个错误吗?或者我的代码有什么问题吗?

我正在使用 MacOS 11.6.1、 GNU bash 3.2.57(1)-release (x86_64-apple-darwin20)、 GNU Make 3.81、 tputncurses 5.7.20081102

4

2 回答 2

1

引用正在设置的值作为您的tput sgr0返回 a (

@echo TERM2='${BG_RED}${TERM}${_OFF}_xxx'

如果你想使用 bash 而不是 sh,那么你需要 SHELL 变量:

SHELL=/bin/bash
于 2021-12-09T07:47:38.923 回答
0

感谢@Renaud Pacalet 和@Allan Wind 的评论。引用回显字符串可以修复语法错误。

BG_RED := $(shell tput setab 1)
_OFF := $(shell tput sgr0)

$(info TERM1=${BG_RED}${TERM}${_OFF}_xxx)

all:
    @echo 'TERM2=${BG_RED}${TERM}${_OFF}_xxx'

根据@Allan Wind 的提示,我认为问题出(tput sgr0输出中

$ tput sgr0 | od -a                                                                                                                 
0000000  esc   (   B esc   [   m
0000006
于 2021-12-09T07:47:31.830 回答