将多个命令传递给一个命令

我怎样才能将多个命令的标准输出传送给一个命令?

示例1:组合并sorting所有三个回显命令的输出:

echo zzz; echo aaa; echo kkk 

所需的输出:

 aaa kkk zzz 

示例2:重写以下内容,以便所有命令都使用pipe道在单个命令行中,而不redirect到临时文件:

 setopt > /tmp/foo; unsetopt >> /tmp/foo; set >> /tmp/foo; sort /tmp/foo 

使用圆括号()将命令组合成一个单独的进程,它将连接每个进程的stdout。

例1(注意$是shell提示符):

 $ (echo zzz; echo aaa; echo kkk) | sort aaa kkk zzz 

例2:

 (setopt; unsetopt; set) | sort 

您可以使用{}来完成此操作,并且不需要像(list)那样的子shell,如下所示:

 { echo zzz; echo aaa; echo kkk; } | sort 

{和之前}之后我们确实需要一个空格字符。 我们也需要最后的; 当序列写在一行上时。

我们也可以在不需要的情况下将其写在多行上;

例1:

 { echo zzz echo aaa echo kkk } | sort 

例2:

 { setopt unsetopt set } | sort 

在Windows中,它将如下所示: (echo zzz & echo aaa & echo kkk) | sort (echo zzz & echo aaa & echo kkk) | sort

或者如果它在一个batch file中,它可以是单行(如样本)以及多行:

 ( echo zzz echo aaa echo kkk ) | sort 

注意:原帖并没有提到它只针对Linux,所以我添加了Windows命令行的解决scheme…在使用diskpart内部脚本的VHD / VHDX( echo diskpart_command )而不是同样的,但是在那里有echo ,还有另外一种没有回声的方法,并且使用redirect器,但是它很容易出错,而且写得复杂得多(为什么使用复杂的容易出错的方法,如果存在一个简单的方法,总是工作好吧)…还记得%d%给你实际的path(非硬编码VHD / VHDX文件的path非常有用)。