web-dev-qa-db-fra.com

Execute combine plusieurs commandes Linux sur une seule ligne

J'essaie de fusionner plusieurs commandes linux sur une seule ligne pour effectuer l'opération de déploiement. Par exemple

cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
308
d-man

Si vous souhaitez exécuter chaque commande uniquement si la précédente a réussi, combinez-les à l'aide de l'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 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 permettent d'empêcher le shell de penser que la ligne suivante est une nouvelle commande. Si vous omettez les barres obliques inversées, vous devrez écrire la commande entière sur une seule ligne.)

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 variable d’environnement PATH (par exemple, /usr/local/bin ou sur certaines distributions Linux ~/bin), vous devrez spécifier le chemin. à ce script. Si c'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 l'exécution inconditionnelle de toutes les commandes, il suffit de lister chaque commande sur sa propre ligne:

#! /bin/sh
cd /my_folder
rm *.jar
svn co path to repo
mvn compile package install
686
Nikos C.

J'ai trouvé cela en utilisant; séparer les commandes ne fonctionne qu'au premier plan. par exemple :

cmd1; cmd2; cmd3 & - n'exécutera que cmd3 en arrière-plan, tandis que cmd1 && cmd2 && cmd3 & - exécutera toute la chaîne en arrière-plan SI aucune erreur ne survient.

Utiliser une parenthèse pour résoudre une exécution inconditionnelle résout le problème suivant:

(cmd1; cmd2; cmd3) & - exécutera la chaîne de commandes en arrière-plan, même si une étape échoue.

43
Dean

Vous pouvez séparer vos commandes en utilisant un point-virgule:

cd /my_folder;rm *.jar;svn co path to repo;mvn compile package install

Était-ce ce que vous voulez dire?

10
andrux

Pour les exécuter tous en même temps, vous pouvez utiliser la clé de ligne de conduite "|" ainsi:

$ cd /my_folder | rm *.jar | svn co path to repo | mvn compile package install
2
Kelly Poore

Si vous voulez exécuter toutes les commandes, que la précédente soit exécutée ou non, vous pouvez utiliser un point-virgule (;) pour séparer les commandes.

cd /my_folder; rm *.jar; svn co path to repo; mvn compile package install

Si vous souhaitez exécuter la commande suivante uniquement si la commande précédente réussit, vous pouvez utiliser && pour séparer les commandes.

cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install

Dans votre cas, l’exécution de commandes consécutives semble dépendre des commandes précédentes, utilisez donc le deuxième exemple, c’est-à-dire utilisez && pour joindre les commandes.

2
Prabhu
cd /my_folder && rm *.jar && svn co path to repo && mvn compile package install
1
Mark Stevens

Quelle est l'utilité d'un seul esperluette? Ce matin, j'ai fait un lanceur dans le panneau XFCE (sous Manjaro + XFCE) pour lancer simultanément 2 gestionnaires de mots de passe:

sh -c "keepassx && password-gorilla"
or
sh -c "keepassx; password-gorilla"

Mais ça ne marche pas comme je veux. I.E., la première application démarre mais la seconde ne démarre que lorsque la précédente est fermée: - /

Cependant, j'ai trouvé que (avec une seule esperluette):

sh -c "keepassx & password-gorilla"

et ça marche comme je veux maintenant ...

0
Nettlebay AP