:如果加两个条件:
f并行运行;(1)要求cmd1和cmd2并行运行;)(2)将cmd1的返回值赋给变量ss。)。则为:则为:exec31exec41sslsyou
o21133echo4egrepfile41exec3exec4说明:说明:exec3141建立FD3,是用来将下面ls那条语句(子shell)中的FD1恢复到正常FD1,即输出到那条语句(,),mo
itor,你可以把FD3看作最初始的FD1的硬盘备份(即输出到mo
itor);,的硬盘备份();建立FD4,到时用作保存ls的返回值(echo),你可以将FD4看作你考试时用于存放计的返回值(),你可以将,),的草稿纸;算“echo”的草稿纸;的草稿纸
lsyou
o21133echo4大家还记得前面说的子shell和管道吧。这条命令首先会继承FD0、和管道吧。、FD1、、FD2、、FD3、、FD4,,它位于管道前,和管道“”相连相连。它位于管道前,所以在运行命令前会先把子shell自己的FD1和管道相连。但是我们的条件是stderr通过管道送往egrep,stdout仍然输出到mo
itor。,。的管道“送给送给”FD2,送往管道“”;于是通过21,,先把子shell的FD1的管道送给,于是子shell中的stderr送往管道;硬盘备份”恢复给子再通过13,把以前的硬盘备份恢复给子shell的FD1,于是子shell中的FD1变成送到,把以前的“硬盘备份,mo
itor了。关闭;再通过3,将3关闭;本来其输出值应该送往管道的,草稿纸”FD4,接着运行echo,本来其输出值应该送往管道的,通过4,将输出送往“草稿纸草稿纸,留以备用。留以备用。
lsyou
o21133echo4egrepfile于是,于是,stderr通过管道送给egrep,stdout送给mo
itor,但是,还有FD4,它送到哪去了?,但是,,它送到哪去了?lsyou
o21133echo4egrepfile41最后的41,就是把FD4重定向到FD1。但由于其输出在中,其值就赋给变量ss了。。中最后一行关闭FD3、FD4。、。
6、高阶例子、lightspeed版主大大的:Shell经典问题之IO重定向版主大大的:重定向(httpbbschi
au
ix
etforumviewtopicphpt452079show_type
ew))Q对于命令cmd1cmd2cmd3cmd4如何利用单向管道完成下列功能:如何利用单向管道完成下列功能:1所有命令并行执行2cmd1和cmd2不需要stdi
3cmd1和cmd2的stdout定向到cmd3的stdi
f4cmd1和cmd2的stderr定向到cmd4的stdi
5cmd3的stdout定向到文件astderr定向到屏幕6cmd4的stdout定向到文件bstderr定向到屏幕7cmd1的返回码赋给变量s8不能利用临时文件r