我有以下命令
$ echo \\newcommand{\\coverheight}{11.0in} > tmp
$ cat tmp
echo \\newcommand{\\coverheight}{11.0in} > tmp
但是当我在make文件中使用相同的echo
命令时,它没有正确写入文件。
# Makefile
all:
printf '\\newcommand{\\coverheight}{11.0in}' > tmp
运行`make'后,输出为:
$ cat tmp
ewcommand{
如何使用Makefile
使用echo
正确写入文件?
答案 0 :(得分:0)
make
只是将一个食谱(除了分割长行除外)发送到你的shell并且不解释它。所以你的shell会解释它。
所以你的shell运行这个echo
和printf
命令。像bash或zsh这样的shell使用echo和printf的内置命令(如果你不说明确地使用/bin/echo
命令)。
shell之间内置命令的行为有所不同。更重要的是,您可以使用一个shell运行交互式命令,make
使用不同的shell(默认情况下为/ bin / sh)来处理收件人。
以下是shell之间差异的示例。当我在echo \\newcommand
中的bash
中投放时,我得到了:
$ echo \\newcommand
\newcommand
当我在echo \\newcommand
中运行zsh
时,我得到了:
$ echo \\newcommand
ewcommand
我怀疑你因为它而得到不同的结果。实际上printf '\\newcommand{\\coverheight}{11.0in}'
必须更正确,因为它使用强引号。
无论如何,在makefile中打印的一种方法似乎是使用外部命令/ bin / echo:
all:
command echo '\\newcommand{\\coverheight}{11.0in}' > tmp
或者使用强有力的报价:
all:
printf '\\newcommand{\\coverheight}{11.0in}' > tmp