2017-08-18 2 views
0

Mon script essaie d'exécuter mvn clean installe dans tous les projets mais avant d'essayer de basculer vers la branche dev et de le tirer.Erreur de syntaxe dans le script

successString="[INFO] BUILD SUCCESS"; 
file="mvnoutput"; 
red=$'\e[1;31m'; 
grn=$'\e[1;32m'; 
end=$'\e[0m'; 

function checkResult 
    if grep -Fxq "$successString" $file 
    then 
     echo -en "${grn}[${1}]Build ok${end}"; 
    else  
     echo "${red}[${1}]Error in mvn clean install${end}"; 
     exit 1; 
    fi; 
end 

function pullAndSwitchDevBranch 
    git checkout dev; 
    git pull origin dev; 
end 

cd api-pay-commons/; 
pullAndSwitchDevBranch; 
touch mvnoutput; 
mvn clean install -U > mvnoutput; 
checkResult PAY; 

Pourquoi j'ai reçu cette erreur?

ligne 17: Fin: command not found ./script.sh: Ligne 20: syntaxe

erreur près de la caisse git git' ./script.sh: line 20: jeton inattendu dev; »

Répondre

4

Vous avez utilisé l'étiquette "poisson", donc je suppose que vous utilisez cette coque de poisson.

Si oui: Ceci n'est pas un script de poisson valide. Fish n'est explicitement pas compatible avec POSIX, donc vous pourriez vouloir lire sur la syntaxe. (Si non, veuillez corriger votre étiquette)

red = $ '\ e [1; 31m';

Le poisson n'utilise pas var=value pour définir une variable. Il utilise set var value.

Le poisson n'a pas non plus le style de cotation $''. Au lieu de cela, les barres obliques inversées sont interprétées en dehors de de guillemets. Il s'agit donc de set red \e"[1;31m". Alternativement, le poisson offre le set_color intégré, qui imprime la séquence d'échappement pour une couleur donnée. Donc, cela pourrait être set red (set_color red) (ou vous pouvez appeler set_color plus tard). Le poisson n'utilise pas if condition; then dosomething; fi. C'est if condition; dosomething; end. Le poisson n'utilise pas "${var}". Il n'appelle pas non plus les arguments de la fonction $1 et al. Il s'agit de quelque chose comme echo -ens "$grn" "[$argv[1]]" "Build ok" "$end".

exit 1 

poisson ne permet pas actuellement des fonctions exit ing. Vous devrez return 1 et vérifier le résultat de l'extérieur.

En outre, vous utilisez des points-virgules un peu partout, ce qui n'est pas un style typique dans tous les cas dont je suis conscient. Si vous n'utilisez pas de poisson, mais une coquille POSIX compatible (comme bash), cela n'est pas non plus valable. Le problème principal (et éventuellement unique) est que vous utilisez function something; dosomething; end. En bash, ce serait

function something() { 
     #dostuff 
} 

Et pur Posix, ce serait

something() { 
    #dostuff 
} 
+0

réponse exhaustive. fantastique! –