管道多个命令


8

我想运行以下命令,并将两者的管道粗壮传递给TextEdit:

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

这是行不通的,它只执行后者:

怎么样?

Answers:


11

啊,bash重定向:-

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

该命令将您的命令作为单个bash命令(即的效果&&)在子外壳程序中运行(这是将其包装在外壳()中),然后将子外壳程序的输出重定向到您的TextEdit中。从技术上讲,您不必使用&&代替,;但是更改它的结果是,如果任何命令失败,它将在此时停止整个链。

注意:在您的示例中,所有命令都在运行(可以通过仅pmset -g; echo; pmset -g assertions在命令行上运行来证明),只是将管道仅应用于最后一个。这就是为什么它需要在子shell中运行的原因。

注意:如果需要,您可以将|字符替换为>并将输出发送到文件。


这个小技巧非常有用。几乎没有记录内置命令/特殊字符的来龙去脉。再次感谢你。
njboot 2014年

4

()将命令合并为一个进程,将它们连接到stdout:

(pmset -g; echo; pmset -g assertions) | open -f -a TextEdit
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.