0
我有一个makefile,其中一个操作要求我将一个字符串\noslide
写入名为modeset.txt的文本文件,所以我使用'echo'。虽然-E标志应该禁用反斜杠转义的解释回声处理该标志作为sting的一部分(请参阅下面的输出)。没有解释换行符的回声
这里是我的makefile一个剥离下来的片段:
.PHONY: target all
all: target
target:
echo -E "\noslide" > modeset.txt
clean:
rm -f modeset.txt
的呼应吞并了-E作为字符串的一部分modeset.txt文件显示的内容。
-E
oslide
然而,在shell中,echo -e和echo -E按预期工作,所以makefile环境在做什么导致这种情况?
操作系统:只从官方消息来源的香草Debian 8。
这是因为在某些系统(包括Debian的),默认的shell是'/斌/ sh'实现'echo'而不支持'-E'。解决方法是指定'SHELL =/bin/bash'或明确使用'/ bin/echo'(可能定义'ECHO =/bin/echo') –
这可能适用于所有使用GNU coreutils进行回显的Linux系统,但其他系统(BSD等)上的'/ bin/echo'行为也可能不同。 – MadScientist
@MadScientist没错,'/ bin/echo'的行为可能因系统而异,甚至GNU coreutils'/ bin/echo'的特定版本可能会根据环境变量'POSIXLY_CORRECT'的设置改变其行为。也就是说,OP的问题的答案是有回声,回声和回声:一个shell(在'SHELL'变量中指定 - 默认为'/ bin/sh')内建,如果它存在或者PATH中的命令'(希望'/ bin/echo',但这可能取决于'PATH'中的目录顺序,如果有其他'echo'命令的话)。 –