shell 错误输出重定向到标准输出
来源:互联网 发布:平价红酒 知乎 编辑:程序博客网 时间:2024/05/24 05: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
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
可以看到,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
这次,stderr和stdout的内容都被重定向到log文件中了。
实际上, > 就相当于 1> 也就是重定向标准输出,不包括标准错误。通过2>&1,就将标准错误重定向到标准输出了(stderr已作为
stdout的副本),那么再使用>重定向就会将标准输出和标准错误信息一同重定向了。如果只想重定向标准错误到文件中,则可以使
用2> file。
那么如何将标准错误输出重定向到一个文件的同时在屏幕上也显示?
- [root@home root]# id fdfd 2>&1 |tee logfile
- id: fdfd: No such user
- [root@home root]# cat logfile
- id: fdfd: No such user
管道的用途是把进程的标准输出连接到另一个进程的标准输入,2>&1是把标准错误作为标准输出的副本。在楼顶那个命令里,把标
准输出和标准错误都输出作为tee命令的标准输入,tee的用途是把标准输入的副本拷贝到文件,并输出。不要混淆管道与重定向,
这是两个不同的概念。
- shell 错误输出重定向到标准输出
- shell将标准错误输出重定向为标准输出
- 重定向标准输出错误输出到编辑控件中!
- 将Linux 标准输出,错误输出重定向到文件
- 重定向标准错误输出
- 重定向标准错误输出
- 重定向标准错误输出
- vxworks5.5标准输出重定向到Shell上
- Linux重定向:将标准输出stdout和标准错误stderr重定向到一个文件
- shell如何将标准错误输出重定向为标准输出
- linux 重定向 标准输入 标准输出 标准错误输出
- linux下重定向,把标准输出和错误输出一起同定向到文件
- 标准输入输出、错误输出、重定向标准输出
- 标准输入输出、错误输出、重定向标准输出
- tcsh重定向标准输出和标准错误输出
- 标准输入输出、错误输出、重定向标准输出
- 标准输入输出、错误输出、重定向标准输出
- 将标准输出重定向到GUI
- 在eclipse中插入注释模板
- Linux,du、df统计的硬盘使用情况不一致问题
- ArcGIS Editor for OSM, 10.3.x Desktop
- 让jvm崩溃一段程序
- switch 语句表达式值类型
- shell 错误输出重定向到标准输出
- 浏览器的重绘与重排
- CSS中不为人知Zoom属性的使用介绍(IE私有属性)
- 3.模型 类方法和实例方法 readonly id instancetype
- Java 自定义servlet 继承httpservlet时 需要引入那些jar包
- 分辨率 和 资源关系
- Android 模拟器 Atom-x86 cpu加速
- 移动token登录
- 【转载】RESTful API 设计最佳实践