Передача декількох команд


8

Я хотів би виконати таку команду та макет труби обох TextEdit:

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

Це не працює, воно виконує лише останнє:

Як?

Відповіді:


11

Аааа, bashперенаправлення: -

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

Це запускає ваші команди як єдину команду bash (це ефект &&) в підколонці (це те, що обертає її в " ()і") і перенаправляє висновок підкошти в TextEdit для вас. Технічно вам не доведеться використовувати &&замість цього, ;але ефект його зміни полягає в тому, що якщо якась із команд не вдасться, вона зупинить весь ланцюг у цій точці.

Примітка. У вашому прикладі всі команди виконуються (як ви можете довести, просто запустивши pmset -g; echo; pmset -g assertionsв командному рядку), ви просто застосовуєте трубу лише до останньої. Ось чому його потрібно запускати в передпласті.

Примітка: ви можете замінити |символ >і надіслати висновок у файл, якщо хочете.


Ця маленька порада була неймовірно корисною. Про вбудовані команди / спеціальні символи майже не зафіксовано. Ще раз дякую вам.
njboot

4

() об'єднайте команди в єдиний процес, об'єднавши їх у stdout:

(pmset -g; echo; pmset -g assertions) | open -f -a TextEdit
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.