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

Я хотел бы запустить следующую команду и передать ее в TextEdit:

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

Это не работает, выполняется только последнее:

Как?

Ответы (2)

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

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

Это запускает ваши команды как единую команду bash (это эффект &&) во вспомогательной оболочке (что делает ее обертка ()) и перенаправляет вывод вспомогательной оболочки в TextEdit для вас. Технически вам не нужно использовать &&вместо, ;но эффект от его изменения заключается в том, что если какая-либо из команд завершится ошибкой, в этой точке будет остановлена ​​вся цепочка.

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

Примечание: вы можете заменить |символ >и отправить вывод в файл, если хотите.

Этот маленький совет оказался невероятно полезным. Входы и выходы встроенных команд/специальных символов практически не документированы. Еще раз спасибо.

() объединяют команды в один процесс, объединяя их в стандартный вывод:

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