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

8

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

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

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

Как?

njboot
источник

Ответы:

11

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

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

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

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

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

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

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

(pmset -g; echo; pmset -g assertions) | open -f -a TextEdit
l'L'л
источник