2011-04-08 55 views
1

我GOOGLE了這一點,但我想不出爲什麼猛砸用下面的代碼抱怨,以檢查是否存在一個目錄:製作失敗檢查,如果目錄存在

test.mk

#!/bin/bash 

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

化妝-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 

回答

4

您在頂部插入的#!/bin/bash家當是沒用的,它是由make視爲註釋。

make默認發送的命令爲/bin/sh。要指定不同的shell,請使用宏SHELL = /bin/bash

此外,你需要逃避你的變量:

if [ ! -d ${MYDIR} ] 

我不知道是否能make處理多行語句,所以儘量把所有的if塊在一條線上。

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

'make'處理多行語句就好了。簡單地說就是在行的末尾。 – eriktous 2011-04-08 10:23:52

+0

@eriktous感謝您的信息! – 2011-04-08 12:39:07

3

你喂test.mkmake,不bash。然後make發送單個行到shell,而不是整個塊。

make使用它的SHELL宏來確定使用哪個外殼。您可以覆蓋它使其使用bash

你得到YDIR的原因是make對變量插值有愚蠢的規則。寫$(MYDIR),而不是$MYDIR

+0

感謝您的提示,但無論我使用哪種格式,即無關緊要。無論是$(MYDIR)還是$ {MYDIR},sh仍然抱怨「/ bin/sh:語法錯誤:文件意外結束」 – Gulbahar 2011-04-08 10:14:07

+0

@user嘗試將所有內容放在一行中,正如我在答案中所寫的那樣。 – 2011-04-08 10:16:09

+0

謝謝,那是問題所在。 – Gulbahar 2011-04-08 10:27:46

0

嘗試支撐你的變量:

${MYDIR} 
相關問題