我有一个makefile,如果这个文件还没有签出,我想在文件上签出:
VAR=$(shell cleartool ls $(HOME)/all_files.tgz | grep CHECKEDOUT)
build:
@if ["$(VAR)" == ""]; then \
cleartool co -unres -nc $(HOME)/all_files.tgz;\
fi
@ tar czf $(HOME)/all_files.tgz $(OUT)/*.log
如果检出all_files.tgz,我会收到以下错误:
/bin/sh: [/home/ge/prj/all_files.tgz@@/main/10/CHECKEDOUT from /main/10 Rule: CHECKEDOUT: not found
答案 0 :(得分:2)
当你在shell中使用括号时,你必须在它们周围包含空格。这是因为[
实际上是一个单独的命令:如果使用["$(VAR)"
扩展为上面引用的字符串([/home/ge/prj/all_files.tgz@@/main/10/CHECKEDOUT from /main/10
)并且这不是有效的命令名称。类似地,对于最终]
:必须在其周围有空格。
使用:
VAR=$(shell cleartool ls $(HOME)/all_files.tgz | grep CHECKEDOUT)
build:
@if [ "$(VAR)" == "" ]; then \
cleartool co -unres -nc $(HOME)/all_files.tgz;\
fi
@ tar czf $(HOME)/all_files.tgz $(OUT)/*.log
但这是一种奇怪的规则。由于VAR只是一个shell函数,并且你在shell中使用它,为什么还要费心使用$(shell ...)
?