Chciałbym uruchomić następującą komendę i potok obie do TextEdit:
pmset -g; echo; pmset -g assertions | open -f -a TextEdit
To nie działa, wykonuje tylko to drugie:
W jaki sposób?
źródło
Chciałbym uruchomić następującą komendę i potok obie do TextEdit:
pmset -g; echo; pmset -g assertions | open -f -a TextEdit
To nie działa, wykonuje tylko to drugie:
W jaki sposób?
Aahhh, bash
przekierowanie: -
( pmset -g && echo && pmset -g assertions ) | open -f -a TextEdit
To uruchamia twoje polecenia jako pojedyncze polecenie bash (jest to efektem &&
) w podpowłoce (co jest tym, co ją ()
otacza) i przekierowuje wyjście podpowłoki do TextEdit. Technicznie nie musisz używać &&
zamiast, ;
ale efektem zmiany jest to, że jeśli któreś z poleceń nie powiedzie się, zatrzyma cały łańcuch w tym momencie.
Uwaga: W twoim przykładzie wszystkie polecenia są uruchamiane (co możesz udowodnić, uruchamiając po prostu pmset -g; echo; pmset -g assertions
z wiersza poleceń), po prostu nakładasz potok tylko na ostatnie. Dlatego należy go uruchomić w podpowłoce.
Uwaga: jeśli chcesz, możesz zamienić |
znak na >
i wysłać dane wyjściowe do pliku.
() łączą polecenia w jeden proces, łącząc je w standardowe wyjście:
źródło