/ / Make falla al verificar si el directorio existe - bash, makefile

Hacer fallas comprobando si el directorio existe - bash, makefile

Busqué en Google esto, pero no puedo entender por qué Bash se queja con el siguiente código para verificar si existe un directorio:

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

¿Alguien sabe por qué falla? ¿Y por qué llama a / bin / sh en lugar de / bin / bash? Gracias.


Editar: a diferencia de Bash, make no admite bloque de varias líneas. Aquí está el código de trabajo:

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

Respuestas

4 para la respuesta № 1

los #!/bin/bash El shebang que insertó en la parte superior es inútil y es tratado por make como un comentario

make envía por defecto comandos a /bin/sh. Para especificar un shell diferente, use la macro SHELL = /bin/bash.

Además, necesita escapar de su variable:

if [ ! -d ${MYDIR} ]

No estoy seguro si make puede manejar declaraciones de varias líneas, así que intente poner todas las if bloque en una línea.

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

3 para la respuesta № 2

Te estas alimentando test.mk a make, No a bash. Entonces make envía líneas individuales al shell, no bloques enteros.

make usa su SHELL macro para determinar qué shell usar. Puedes anularlo para que se use bash.

La razón por la que estás recibiendo YDIR es eso make tiene reglas tontas sobre la interpolación variable. Escribir $(MYDIR)no $MYDIR.


0 para la respuesta № 3

Intenta apuntalar tu variable:

${MYDIR}