Vous pouvez séparer vos commandes à l'aide d'un point-virgule :
cd /my_folder;rm *.jar;svn co path to repo;mvn compile package install
C'était ça que tu voulais dire ?
Si vous souhaitez exécuter chaque commande uniquement si la précédente a réussi, combinez-les à l'aide du &&
opérateur :
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
Si l'une des commandes échoue, toutes les autres commandes qui la suivent ne seront pas exécutées.
Si vous souhaitez exécuter toutes les commandes, que les précédentes aient échoué ou non, séparez-les par des points-virgules :
cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install
Dans votre cas, je pense que vous voulez le premier cas où l'exécution de la commande suivante dépend du succès de la précédente.
Vous pouvez également mettre toutes les commandes dans un script et l'exécuter à la place :
#! /bin/sh
cd /my_folder \
&& rm *.jar \
&& svn co path to repo \
&& mvn compile package install
Les barres obliques inverses à la fin de la ligne sont là pour empêcher le shell de penser que la ligne suivante est une nouvelle commande; si vous omettez les barres obliques inverses, vous devrez écrire toute la commande sur une seule ligne.
Un moyen plus pratique que d'utiliser des barres obliques inverses et &&
partout est de demander au shell de quitter le script si l'une des commandes échoue. Vous faites cela en utilisant le set
fonction intégrée avec le -e
dispute. Avec cela, vous pouvez écrire un script de manière beaucoup plus naturelle :
#! /bin/sh
set -e
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
Enregistrez cela dans un fichier, par exemple myscript
, et rendez-le exécutable :
chmod +x myscript
Vous pouvez maintenant exécuter ce script comme d'autres programmes sur la machine. Mais si vous ne le placez pas dans un répertoire répertorié dans votre PATH
variable d'environnement (par exemple /usr/local/bin
, ou sur certaines distributions Linux ~/bin
), vous devrez alors spécifier le chemin d'accès à ce script. S'il est dans le répertoire courant, vous l'exécutez avec :
./myscript
Les commandes du script fonctionnent de la même manière que les commandes du premier exemple ; la commande suivante ne s'exécute que si la précédente a réussi. Pour une exécution inconditionnelle de toutes les commandes, n'appelez simplement pas set -e
:
#! /bin/sh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
J'ai trouvé qu'en utilisant; séparer les commandes ne fonctionne qu'au premier plan. ex :
cmd1; cmd2; cmd3 &
- n'exécutera que cmd3
en arrière-plan, alors que cmd1 && cmd2 && cmd3 &
- exécutera toute la chaîne en arrière-plan S'il n'y a pas d'erreurs.
Pour répondre à une exécution inconditionnelle, l'utilisation de parenthèses résout ceci :
(cmd1; cmd2; cmd3) &
- exécutera la chaîne de commandes en arrière-plan, même si une étape échoue.
Pour les exécuter tous en même temps, vous pouvez utiliser la touche de ligne de pipeline "|" comme ceci :
$ cd /my_folder | rm *.jar | svn co path to repo | mvn compile package install