Сделать не удалось, если каталог существует - PullRequest
1 голос
/ 08 апреля 2011

Я гуглил по этому поводу, но не могу понять, почему 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 ]

4 голосов
/ 08 апреля 2011

Шибанг #!/bin/bash, который вы вставили сверху, бесполезен, и make рассматривается как комментарий.

make отправляет команды по умолчанию на /bin/sh.Чтобы указать другую оболочку, используйте макрос SHELL = /bin/bash.

. Кроме того, вам нужно экранировать переменную:

if [ ! -d ${MYDIR} ]

Я не уверен, что make может обрабатывать несколькостроковые операторы, поэтому постарайтесь поместить все блоки if в строку.

if [ ! -d ${MYDIR} ]; then DO_SOMETHING; DO_SOMETHING_ELSE; fi
3 голосов
/ 08 апреля 2011

Вы кормите test.mk на make, а не на bash.Затем make отправляет отдельные строки в оболочку, а не целые блоки.

make использует свой макрос SHELL, чтобы определить, какую оболочку использовать.Вы можете переопределить его, чтобы использовать bash.

Причина, по которой вы получаете YDIR, заключается в том, что make имеет глупые правила относительно интерполяции переменных.Пишите $(MYDIR), а не $MYDIR.

0 голосов
/ 08 апреля 2011

попробуйте связать вашу переменную:

${MYDIR}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...