Pour les lignes suivantes dans mon Makefile, j'obtiens l'erreur
Syntax error: end of file unexpected (expecting "then")
Code:
if [ ! -d upload-api/app-router/ ] then
git clone someRepo upload-api/app-router/
fi
J'ai essayé avec un point-virgule après les crochets mais j'obtiens toujours la même erreur
Vous devez ensuite mettre à la ligne suivante ou utiliser le point-virgule
if [ ! -d upload-api/app-router/ ]
then
ou
if [ ! -d upload-api/app-router/ ];then
Dans le contexte d'un makefile, je vois deux choses.
Tout d’abord, vous avez besoin d’un point-virgule ou d’une nouvelle ligne avant le then
name__. La syntaxe de shell pour if
se présente comme suit: if commands... ; then commands... ; fi
(où tout point-virgule peut être remplacé par une nouvelle ligne).
Deuxièmement, lorsque make
exécute une recette, il exécute chaque ligne individuelle de la recette dans une instance de shell distincte et cesse de s’exécuter si une seule ligne génère une erreur. Effectivement, ça tourne:
sh -c 'if [ ! -d upload-api/app-router/ ]; then' &&
sh -c 'git clone someRepo upload-api/app-router/' &&
sh -c 'fi'
... qui est une erreur de syntaxe sur la première ligne, avec ou sans point-virgule, car if
n'est jamais terminé.
Donc, pour une recette de makefile, vous devez indiquer à make
qu'il doit traiter le bloc if ... fi
entier comme une seule ligne. Par exemple, utilisez des barres obliques inverses pour la continuation de ligne et des points-virgules aux emplacements appropriés, car le shell ne verra pas de saut de ligne.
my-target:
↦ if [ ! -d upload-api/app-router/ ] ; then \
↦ git clone someRepo upload-api/app-router/ ; \
↦ fi
Cela devient vite assez compliqué, alors ma solution préférée consiste généralement à placer le shellscript dans un fichier séparé, puis à l'exécuter à partir de votre recette.