我正在尝试构建一个项目,该项目的Makefile导入了一个erlang.mk,该网站导入了其他Makefile和erlang. mks。
在一个www.example.com中erlang.mk我在菜谱的条件中有一个grep
调用,如下所示
if grep ^$$dep$$ $(ERLANG_MK_TMP)/deps.log; then \
这就是打印
grep: /home/forrealthough/code/rabbitmq-consistent-hash/.erlang.mk/deps.log: No such file or directory
返回代码为2。如果我把这一行放在
if [ ! -f $$ERLANG_MK_TMP/deps.log ]; then echo "File not found!"; fi;\
我得到“文件未找到!"。
该文件确实存在,我可以cat
它从相同的目录,并运行相同的if
行没有得到一个“文件找不到!"。它的权限是-rw-rw-r--
,我得到相同的错误运行make
有或没有sudo
。
为什么我的脚本找不到此文件?
编辑:我被要求修改我的if
测试,所以下面是我的脚本的相关部分(这在一个食谱中):
echo file: $(ERLANG_MK_TMP)/deps.log;\
if [ ! -f $(ERLANG_MK_TMP)/deps.log ]; then echo "File not found!"; fi;\
if grep ^$$dep$$ $(ERLANG_MK_TMP)/deps.log; then \
然后打印
file: /home/forrealthough/rabbitmq-consistent-hash/.erlang.mk/deps.log
File not found!
grep: /home/forrealthough/rabbitmq-consistent-hash/.erlang.mk/deps.log: No such file or directory
make: *** [erlang.mk:4322: deps] Error 2
同样,文件确实存在。grep
返回status code=2,我检查了它回显$$?
,它运行条件的else
部分。
编辑2:如果我把一个ls $(ERLANG_MK_TMP);\
和其他测试放在一起,它会列出该目录中的每个文件,除了deps.log,它也在那里。这适合我做的其他测试,我试图从这个脚本访问不同的文件,deps.log是唯一找不到的文件。
我在同一个项目中有一个相同的脚本,作为另一个项目的模块构建(另一个Makefile导入另一个erlang.mk,试图构建我正在处理的项目的Makefile)。在那里,脚本可以找到有问题的文件,并且它正常运行。
1条答案
按热度按时间gupuwyp21#
$(ERLANG_MK_TMP)
是一个make变量。$$ERLANG_MK_TMP
是一个(转义的)shell变量。后者只有在导出前者时才有值,如果你只是在makefile中赋一个make变量而不导出它,它就没有任何值。为什么在这里使用两种不同的格式?为什么不用途:
?