I would like to run the following command and pipe stout of both to TextEdit:
pmset -g; echo; pmset -g assertions | open -f -a TextEdit
This doesn't work, it only executes the latter:
bash redirection :-
( pmset -g && echo && pmset -g assertions ) | open -f -a TextEdit
That runs your commands as a single bash command (that's the effect of
&&) in a sub-shell (which is what wrapping it in the
() does) and redirects the output of the sub-shell into TextEdit for you. You technically don't have to use
&& instead of
; but the effect of changing it is that if any of the commands fail it will stop the entire chain at that point.
Note: In your example all the commands are being run (as you can prove by just running
pmset -g; echo; pmset -g assertions at the command line), it's just that you are applying the pipe to only the last one. That's why it needs to be run in a subshell.
Note: that you could replace the
| character with
> and send the output to a file if you wish.
()'s combine the commands into a single process, concatenating them to stdout:
(pmset -g; echo; pmset -g assertions) | open -f -a TextEdit