将多个命令传递给一个命令
我怎样才能将多个命令的标准输出传送给一个命令?
示例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非常有用)。