Bash Make无法检查目录是否存在

Bash Make无法检查目录是否存在,bash,makefile,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

我在谷歌上搜索过这个,但我不明白为什么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

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

make
使用其
SHELL
宏确定要使用哪个SHELL。您可以覆盖它,使其使用
bash


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

输入
test.mk
make
,而不是
bash
。然后
make
向shell发送单独的行,而不是整个块

make
使用其
SHELL
宏确定要使用哪个SHELL。您可以覆盖它,使其使用
bash


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

尝试使用变量:

${MYDIR}
if [ ! -d ${MYDIR} ]

尝试使用您的变量:

${MYDIR}
if [ ! -d ${MYDIR} ]
#/您在顶部插入的bin/bash
shebang是无用的,它被
make
视为注释

make
默认情况下将命令发送到
/bin/sh
。要指定不同的shell,请使用宏
shell=/bin/bash

此外,还需要转义变量:

${MYDIR}
if [ ! -d ${MYDIR} ]
我不确定
make
是否可以处理多行语句,所以请尝试将所有
if
块放在一行中

if [ ! -d ${MYDIR} ]; then DO_SOMETHING; DO_SOMETHING_ELSE; fi
#/您在顶部插入的bin/bash
shebang是无用的,它被
make
视为注释

make
默认情况下将命令发送到
/bin/sh
。要指定不同的shell,请使用宏
shell=/bin/bash

此外,还需要转义变量:

${MYDIR}
if [ ! -d ${MYDIR} ]
我不确定
make
是否可以处理多行语句,所以请尝试将所有
if
块放在一行中

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

谢谢你的提示,但不管我使用哪种格式,即$(MYDIR)或${MYDIR},sh仍然抱怨“/bin/sh:Syntax error:end of file unexpected”@用户尝试将所有内容按我在回答中所写的方式放在一行中。谢谢你的提示,但不管我使用哪种格式,即$(MYDIR)或${MYDIR},sh仍然抱怨“/bin/sh:Syntax error:end of file unexpected”@用户尝试按照我在回答中所写的方式将所有内容放在一行中。谢谢,这就是问题所在。
make
处理多行语句很好。只需在行的末尾加一个\即可。
make
可以很好地处理多行语句。只需在行的末尾添加\即可。