Unix shell bash脚本无法放置echo调试语句

时间:2012-11-26 07:57:25

标签: shell makefile

我有以下make文件,我认为它是一个shell脚本。

我正在尝试遍历FILE_DIR以执行某些操作。但是,我觉得实施工作没有按预期工作。所以我想插入一些echo断点。

来源:

# Target to recurse through the DIR_LIST and make each makefile found in that DIRS
ALLDIRS:
       for se in $(FILE_DIR); do \
              if [ -d $se ]; then \
              cd $se; \
              $(MAKE) -f Makefile.mk all; \
              cd ..; \
              fi \
       done

运行:

$ make -f Makefile.batch

h: syntax error at line 3: `then' unexpected
*** Error code 2
The following command caused the error:
for se in `ls -p /app/internal|grep "/"`; do \
        echo "Test" \
        if [ -d e ]; then \
        cd e; \
        /usr/ccs/bin/make -f Makefile.mk all; \
        cd ..; \
        fi \
done
make: Fatal error: Command failed for target `ALLDIRS'

我可以请你帮忙吗?想插入一个echo断点。

1 个答案:

答案 0 :(得分:4)

Makefile中的一个常见错误是在命令行中使用空格而不是制表符。检查整个for循环并确保每行的开头只有制表符

ALLDIRS:
<tab>for se in $(FILE_DIR); do \
<tab><tab>if [ -d $se ]; then \
<tab><tab>cd $se; \
<tab><tab>$(MAKE) -f Makefile.mk all; \
<tab><tab>cd ..; \
<tab><tab>fi \
<tab>done

另一个错误是美元符号$。如果你想在shell命令中使用美元符号,你必须在命令中加倍,因为否则美元会引入一个 make变量,并且会在shell看到它之前展开。

for se in $(FILE_DIR); do \
    if [ -d $$se ]; then \
        cd $$se; \
        $(MAKE) -f Makefile.mk all; \
        cd ..; \
    fi \
done

最后一个,echo Test也需要一个分号

for se in $(FILE_DIR); do \
    if [ -d $$se ]; then \
        echo "Test"; \
        cd $$se; \
...