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'命令的話)。 –