1>&2, 2>&1, &>
1>&2, 2>&1, &>
进行一个标准输出、标准错误输出分流的试验:
edemon@ubuntu1:~/workspace$ ./test.shhello world./test.sh: line 3: pt: command not foundedemon@ubuntu1:~/workspace$ ./test.sh 1>out 2>erredemon@ubuntu1:~/workspace$ vim -O out err2
现在尝试直接重定向标准错误到标准输出: edemon@ubuntu1:~/workspace$ ./test.sh 2>1
但是很遗憾,出现这样的结果: hello world
接着我们能发现一个新的文本1,并在文件1中发现错误信息。 bash将1当做了一个普通文件。 使用2 >& 1是为了避免这样的坏事发生。
edemon@ubuntu1:~/workspace$ ./test.sh 2 >& 1hello world./test.sh: line 3: pt: command not found# 或者改成:edemon@ubuntu1:~/workspace$ ./test.sh 2>/dev/stdouthello./test.sh: line 3: pt: command not
能在2的前面加上&吗?不能,bash会将sh脚本在后台执行。
edemon@ubuntu1:~/workspace$ ./test.sh &2 >& 1[1] 3497hello world./test.sh: line 3: pt: command not found2: command not found[1]+ Exit 127
总结: 1和2是文件描述符,而不是文件,需要加上&告诉bash。
例如:
$ cat readthis is a story about herotext block# 创建文件描述符3$ exec 3 1>&2 意思是把标准输出重定向到标准错误. 2>&1 意思是把标准错误输出重定向到标准输出。 &>是2>&1 >的缩写 &>filename 意思是把标准输出和标准错误输出都重定向到文件filename中 例如: $ cat read 2>&1 > read1$ cat read1this is a story about herotext block$ cat /dev/null > read1$ cat read &> read1$ cat read1this is a story about herotext
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~