无法检查目录是否存在

时间:2011-04-08 10:00:46

标签: bash makefile

我用谷歌搜索了这个,但我无法弄清楚为什么Bash抱怨以下代码来检查目录是否存在:

test.mk

#!/bin/bash

MYDIR="dl"
all:
        if [ ! -d $MYDIR ]; then
        #if [ ! -d "${MYDIR}" ]; then
        #if [ ! -d ${MYDIR} ]; then
                #Here
        fi

make -f test.mk

if [ ! -d YDIR ]; then
/bin/sh: Syntax error: end of file unexpected
make: *** [all] Error 2

有人知道它失败的原因吗?为什么它调用/ bin / sh而不是/ bin / bash?谢谢。


编辑:与Bash不同,make不支持多行块。这是工作代码:

MYDIR="dl"
all:
        if [ ! -d ${MYDIR} ]; then\
                echo "Here";\
        else\
                echo "There";\
        fi

3 个答案:

答案 0 :(得分:4)

您在顶部插入的#!/bin/bash shebang是无用的,make将其视为评论。

make默认将命令发送到/bin/sh。要指定其他shell,请使用宏SHELL = /bin/bash

此外,您需要转义变量:

if [ ! -d ${MYDIR} ]

我不确定make是否可以处理多行语句,因此请尝试将所有if块放在一行中。

if [ ! -d ${MYDIR} ]; then DO_SOMETHING; DO_SOMETHING_ELSE; fi

答案 1 :(得分:3)

您正在向test.mk提供make,而不是bash。然后make将单独的行发送到shell,而不是整个块。

make使用其SHELL宏来确定要使用的shell。您可以覆盖它以使其bash

您获得YDIR的原因是make对变量插值有愚蠢的规则。写$(MYDIR),而不是$MYDIR

答案 2 :(得分:0)

尝试支撑你的变量:

${MYDIR}