将文本前置到Makefile中的文件

时间:2016-11-08 02:22:40

标签: bash makefile

我正在尝试使用Makefile将文本预先挂起到文件中。以下bash命令在终端中起作用:

echo -e "DATA-Line-1\n$(cat input)" > input

但是当我将上面的命令放在Makefile中时,它不起作用:

copyHeader:
    @echo -e "DO NOT EDIT THIS FILE \n$(cat input)" > input

我猜$(cat输入)在Makefile中没有按预期工作。

4 个答案:

答案 0 :(得分:3)

我建议使用sed将一行文本添加到文件中。 i命令是一种痛苦;一些聪明的使用保持空间以更复杂但不那么麻烦的方式做同样的事情:

copyHeader:
    sed -i "" '1{h;s/.*/NEW FIRST LINE/;G;}' input

但是如果你想按自己的方式去做,我认为额外的'$'可以解决问题:

<击> copyHeader:
        @echo -e“不要编辑这个文件\ n $$(猫输入)”&gt;输入

编辑:感谢MadScientist指出此方法(使用$(cat input))不可靠。

答案 1 :(得分:0)

在4.0中添加了file功能,从4.2开始也可以从文件中读取

换行有点hacky但这可以通过make make来实现:

define n


endef

copyHeader:
    $(file > input,DATA-Line-1$n$(file < input))

答案 2 :(得分:0)

在搞乱了一段时间之后(接受的答案不适用于OSX 10.12附带的sed,make对于文件操作选项而言太旧了),我决定使用以下(丑陋)解决方案:

echo "DATA-Line-1" > line.tmp
mv input input.tmp
cat line.tmp input.tmp > input
rm input.tmp line.tmp

答案 3 :(得分:0)

这对我有用:

$ cat test
this
is
a
test

$ sed -i "1i new first line" test

$ cat test
new first line
this
is
a
test