Przesyłanie wielu poleceń

8

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?

njboot
źródło

Odpowiedzi:

11

Aahhh, bashprzekierowanie: -

( 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 assertionsz 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.

Tony Williams
źródło
Ta mała wskazówka była niezwykle pomocna. Wbudowane polecenia / znaki specjalne są ledwo udokumentowane. Jeszcze raz dziękuję.
njboot,
4

() łączą polecenia w jeden proces, łącząc je w standardowe wyjście:

(pmset -g; echo; pmset -g assertions) | open -f -a TextEdit
l'L'l
źródło