首页 > 代码库 > ls you no 2>&1 1>&2|egrep \* >file 和 (ls you no 2>&1) 1>&2|egrep \* >file 执行结果不一样
ls you no 2>&1 1>&2|egrep \* >file 和 (ls you no 2>&1) 1>&2|egrep \* >file 执行结果不一样
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 执行结果不一样
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。