码迷,mamicode.com
首页 > 其他好文 > 详细

ls you no 2>&1 1>&2|egrep \* >file 和 (ls you no 2>&1) 1>&2|egrep \* >file 执行结果不一样

时间:2014-12-04 15:50:01      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:shell

1、ls you no 2>&1 1>&2|egrep \* >file
2、(ls you no 2>&1) 1>&2|egrep \* >file

谁shell比较熟悉,这个脚本,为什么执行结果不一样?

 

回答群友问题

 

1、ls you no 2>&1 1>&2|egrep \* >file
这句第一个2>&1把标准输出的管道复制给了2,所以1和2都走的标准输出,后面1>&2时由于他俩都是标准输出了,后面这个复制其实没有起作用,于是所有的标准输出都走了管道,并输出到了文件


2、(ls you no 2>&1) 1>&2|egrep \* >file
先说子shell中,1的标准输出复制给了2,所以子shell的输出全部都是标准输出,整体输出后,碰到1>&2,把标准错误的管道复制给了1,所以这个时候管道之前的所有输出都变成了标准错误,标准错误是不会进入管道的,所以直接作为错误打印到了屏幕,egrep的管道接收不到任何输入流

本文出自 “一路狂奔” 博客,请务必保留此出处http://zhongwen.blog.51cto.com/2645063/1586306

ls you no 2>&1 1>&2|egrep \* >file 和 (ls you no 2>&1) 1>&2|egrep \* >file 执行结果不一样

标签:shell

原文地址:http://zhongwen.blog.51cto.com/2645063/1586306

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!