我正在尝试使用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中没有按预期工作。
答案 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