2>&1是怎么回事
来源:互联网 发布:淘宝卖家搞笑回复 编辑:程序博客网 时间:2024/04/26 18:11
经常可以在一些脚本,尤其是在crontab调用时发现如下形式的命令调用
/tmp/test.sh > /tmp/test.log 2>&1
前半部分/tmp/test.sh > /tmp/test.log很容易理解,那么后面的2>&1是怎么回事呢?
要解释这个问题,还是得提到文件重定向。我们知道>和<是文件重定向符。那么1和2是什么?在shell中,每个进程都和三个系统文件相关联:标准输入stdin,标准输出stdout和标准错误stderr,三个系统文件的文件描述符分别为0,1和2。所以这里2>&1的意思就是将标准错误也输出到标准输出当中。
下面通过一个例子来展示2>&1有什么作用:
$ cat test.sh
t
date
t
date
test.sh中包含两个命令,其中t是一个不存在的命令,执行会报错,默认情况下,错误会输出到stderr。date则能正确执行,并且输出时间信息,默认输出到stdout
./test.sh > test1.log
./test.sh: line 1: t: command not found
$ cat test1.log
Tue Oct 9 20:51:50 CST 2007
./test.sh: line 1: t: command not found
$ cat test1.log
Tue Oct 9 20:51:50 CST 2007
可以看到,date的执行结果被重定向到log文件中了,而t无法执行的错误则只打印在屏幕上。
$ ./test.sh > test2.log 2>&1
$ cat test2.log
./test.sh: line 1: t: command not found
Tue Oct 9 20:53:44 CST 2007
$ cat test2.log
./test.sh: line 1: t: command not found
Tue Oct 9 20:53:44 CST 2007
这次,stderr和stdout的内容都被重定向到log文件中了。
实际上, > 就相当于 1> 也就是重定向标准输出,不包括标准错误。通过2>&1,就将标准错误重定向到标准输出了,那么再使用>重定向就会将标准输出和标准错误信息一同重定向了。如果只想重定向标准错误到文件中,则可以使用2> file。
- 2>&1是怎么回事
- 书摘---创业36条军规1:创业是怎么回事
- cling/rootsys原理剖析(1):JIT到底是怎么回事
- 这是怎么回事?
- “返祖现象”是怎么回事
- 打雷是怎么回事
- 今天 是怎么回事
- GPU 是怎么回事
- JNDI是怎么回事?
- .NET2.0调用NET3.5的wcf 的,proxy多出来的2个参数是怎么回事?
- java.lang.StringIndexOutOfBoundsException: String index out of range: 1这是怎么回事?
- 谁知道people是怎么回事?
- Dual表到底是怎么回事
- 线程安全是怎么回事?
- 儿童假性近视是怎么回事?
- 炒股到底是怎么回事?
- SVS签名验证是怎么回事?
- Share Memory协议是怎么回事
- javascript 当前日期加(天、周、月、年)
- 数据库实用主义
- msdn技术资源库的一个小错误 Membership.GetAllUsers
- 学习笔记13-学习《精通UNIX下C语言编程及项目实践》
- java怎么获取剪切板数据代码示例
- 2>&1是怎么回事
- select中添加、删除option
- javascript 局部页面打印实现代码
- 学习《精通UNIX下C语言编程及项目实践》- 总结与展望(提供下载)
- 设计模式学习体会之单点模式
- 字符串的最大匹配问题
- 面试有感
- 骗子市场
- jQuery 解析xml文件