Exécuter plusieurs commandes Unix à la fois

Voici mes commandes pour une tâche.

find -name myname.tar tar -xvf myname.tar rm -r myname/* 

Ces commandes multi-lignes fonctionnent correctement, mais j’ai besoin d’une commande d’une ligne. Puis j’ai utilisé cette commande,

 find -name myname.tar | tar -xvf myname.tar | rm -r myname/* 

Je reçois cette erreur:

 "rm -r myname/* rm: cannot remove `myname/*': No such file or directory " 

Quelqu’un peut-il m’aider à cela?

Merci

La plupart du temps, vous cherchez un moyen d’exécuter la commande suivante, si la précédente était exécutée sans erreur.

  • Sous UNIX, les erreurs des outils de ligne de commande modifient généralement le statut de sortie du programme.
  • Dans la plupart des shells UNIX, l’opérateur && vérifie le statut de sortie et continue, s’il est à 0 (pour OK)

Donc, ce que vous semblez vouloir, c’est

 find -name myname.tar && tar -xvf myname.tar && rm -r myname/* 

Il existe deux façons courantes de le faire:

Joignez les commandes avec un point-virgule ; qui exécutera les commandes les unes après les autres.

 echo "Hello"; false; echo "There"; >> Hello >> There 

L’autre est de joindre des commandes avec un &&

Le && fera UNIQUEMENT la commande suivante si celle avant elle avait un code de sortie zéro.

 echo "Hello" && false && echo "There"; >> Hello 

Le ‘|’ Le symbole fait quelque chose de complètement différent. Il exécute les deux commandes, sentant la sortie standard de l’une dans la norme de stdin de l’autre. ( wc -w compte le nombre de mots dans stdin .)

 echo "Two Words" | wc -w >> 2 

Ce que vous utilisiez (|) s’appelle un homologue, qui transmet les données d’une commande à une autre. pour ex .:

 $ cat test.php | grep '<'  

pour exécuter plusieurs commandes les unes après les autres, vous pouvez utiliser ';':

 echo 123; echo 456 

ou si vous voulez que vos commandes dépendent du succès de chacun, vous pouvez "&&":

 $ eho 123; echo 456 eho: command not found 456 $ eho 123 && echo 456 eho: command not found