我正试图手动将运行的命令转换为Makefile目标,但我在使用cat
时遇到了一个错误。我想我正在尝试打开文件"cat",而不是打开实际的文件cat
。。。
queries.sql : clean
ls ./sql/**/*.sql | sort -V | while read fn ; do (cat "${fn}"; echo; echo) >> queries.sql; done
clean :
rm -f queries.sql;
单独运行ls
命令效果很好,但使用Makefile,我只得到
cat: : No such file or directory
cat: : No such file or directory
cat: : No such file or directory
cat: : No such file or directory
cat: : No such file or directory
cat: : No such file or directory
...
我是一个新手,所以这可能很简单。此外,我相信有一种方法可以在没有cat
的情况下做到这一点?
编辑:
哦,sql脚本的前缀是日期,即2020-01-02,所以我想保持文件名的排序,如ls -V
所示。
这可能是目前关于make最常被问到的问题。
$
字符是特殊的,因此如果要将$
传递到shell,则必须使用$$
对其进行转义。
所以cat "${fn}"
必须在你的食谱中写为cat "$${fn}"
。