GNU/Linux >> Tutoriels Linux >  >> Linux

Exécuter combiner plusieurs commandes Linux en une seule ligne

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

Linux
  1. Envoyer des commandes à plusieurs sessions SSH avec Terminator

  2. Commandes Linux pour afficher les informations sur votre matériel

  3. Comment installer plusieurs distributions Linux sur une clé USB

  4. Exécuter une ligne de commandes avec One Sudo ?

  5. Principes de base de la ligne de commande Linux - Exécution de commandes à partir de la ligne de commande

Exécuter des commandes sur des systèmes Linux distants via SSH

Copier un fichier dans plusieurs répertoires à partir de la ligne de commande sous Linux

Comment exécuter plusieurs commandes Linux en une seule commande

Comment fusionner plusieurs fichiers PDF en un seul PDF sous Linux

Comment exécuter plusieurs commandes Linux à la fois dans le terminal Linux

5 commandes pour afficher le contenu d'un fichier en ligne de commande Linux