8 votes

Piping multiple commands

J'aimerais exécuter la commande suivante et envoyer le résultat des deux vers TextEdit :

pmset -g; echo; pmset -g assertions | open -f -a TextEdit 

Cela ne fonctionne pas, il n'exécute que le dernier :

Comment ?

11voto

Tony Williams Points 11219

Aahhh, bash redirection :-

( pmset -g && echo && pmset -g assertions ) | open -f -a TextEdit

Cela exécute vos commandes comme une seule commande bash (c'est l'effet de l'option && ) dans une sous-coquille (c'est ce qui l'entoure dans la fonction () ) et redirige la sortie du sous-shell dans TextEdit pour vous. Techniquement, vous n'avez pas besoin d'utiliser && au lieu de ; mais le changement a pour effet que si l'une des commandes échoue, la chaîne entière s'arrêtera à ce point.

Remarque : dans votre exemple, toutes les commandes sont exécutées (comme vous pouvez le prouver en exécutant simplement la commande pmset -g; echo; pmset -g assertions à la ligne de commande), c'est juste que vous n'appliquez le tuyau qu'au dernier. C'est pourquoi il doit être exécuté dans un sous-shell.

Remarque : vous pouvez remplacer le | caractère avec > et d'envoyer le résultat dans un fichier si vous le souhaitez.

4voto

l'L'l Points 8737

() combinent les commandes en un seul processus, en les concaténant à stdout :

(pmset -g; echo; pmset -g assertions) | open -f -a TextEdit

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X