Je voudrais exécuter la commande suivante et le tube stout des deux vers TextEdit:
pmset -g; echo; pmset -g assertions | open -f -a TextEdit
Cela ne fonctionne pas, il exécute uniquement ce dernier:
Comment?
la source
Je voudrais exécuter la commande suivante et le tube stout des deux vers TextEdit:
pmset -g; echo; pmset -g assertions | open -f -a TextEdit
Cela ne fonctionne pas, il exécute uniquement ce dernier:
Comment?
Aahhh, bash
redirection: -
( pmset -g && echo && pmset -g assertions ) | open -f -a TextEdit
Cela exécute vos commandes en tant que commande bash unique (c'est l'effet de &&
) dans un sous-shell (ce qui est ce qui l'enveloppe ()
) et redirige la sortie du sous-shell dans TextEdit pour vous. Techniquement, vous n'avez pas à utiliser à la &&
place de ;
mais l'effet de la modifier est que si l'une des commandes échoue, elle arrêtera toute la chaîne à ce stade.
Remarque: Dans votre exemple, toutes les commandes sont en cours d'exécution (comme vous pouvez le prouver en exécutant simplement pmset -g; echo; pmset -g assertions
sur la ligne de commande), c'est juste que vous appliquez le canal uniquement à la dernière. C'est pourquoi il doit être exécuté en sous-shell.
Remarque: vous pouvez remplacer le |
caractère par >
et envoyer la sortie vers un fichier si vous le souhaitez.
() combine les commandes en un seul processus, les concaténant en stdout:
la source