【shell】输出重定向2>1
标准输出(stdout)和标准错误(stderr),Stdout的编号为1,stderr的编号为2。
默认情况下,重定向操作符(如>,|和<)仅适⽤于stdout的编号1,(service --status-all |& grep network,|&将stdout和stderr⼀起输送到右侧标准输⼊(stdin)流上的进程)
操作符>重定向,将stderr(编号为2)输出定向到Stdout(编号为1),使⽤descriptor重定向到其他流,需要在其前⾯加上&(请注意,字符之间不能有空格):2>&1
service --status-all 2>&1 | grep network
转⾃:
shell上:
0表⽰标准输⼊
1表⽰标准输出
2表⽰标准错误输出
> 默认为标准输出重定向,与 1> 相同
2>&1 意思是把 标准错误输出 重定向到 标准输出.
&>file 意思是把 标准输出 和 标准错误输出 都重定向到⽂件file中
⽤例⼦说话:
1. grep da * 1>&2
2. rm -f $(find / -name core) &> /dev/null
上⾯两例中的 & 如何理解,&不是放到后台执⾏吗?
⽜解:
1.&>file或n>&m均是⼀个独⽴的重定向符号,不要分开来理解。
2.明确⽂件和⽂件描述符的区别。
3.&>file表⽰重定向标准输出和错误到⽂件
例如:
rm -f $(find / -name core) &> /dev/null,/dev/null是⼀个⽂件,这个⽂件⽐较特殊,所有传给它的东西它都丢弃掉。
4.n>&m表⽰使⽂件描述符n成为输出⽂件描述符m的副本。这样做的好处是,有的时候你查⽂件的时候很容易产⽣⽆⽤的信息,如:2>
/dev/null的作⽤就是不显⽰标准错误输出;另外当你运⾏某些命令的时候,出错信息也许很重要,便于你检查是哪出了⽑病,如:2>&1
例如:
注意,为了⽅便理解,必须设置⼀个环境使得执⾏grep da *命令会有正常输出和错误输出,然后分别使⽤下⾯的命令⽣成三个⽂件:
grep da * > greplog1
grep da * > greplog2 1>&2
grep da * > greplog3 2>&1  //grep da * 2> greplog4 1>&2 结果⼀样
#查看greplog1会发现⾥⾯只有正常输出内容
#查看greplog2会发现⾥⾯什么都没有重定向过多是什么意思
#查看greplog3会发现⾥⾯既有正常输出内容⼜有错误输出内容

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。