admin 管理员组文章数量: 1086866
标准输出和标准错误输出
相关概念
默认情况下,总是有三个文件处于打开状态
1. 标准输入(键盘输入) 对应文件描述符0
2. 标准输出(输出到屏幕) 对应文件描述符1
3. 标准错误(也是输出到屏幕) 对应文件描述符2
常用方法
>/dev/null 2>&1实际上,应该等同于这样:1 > /dev/null 2 > /dev/null ,默认情况下就是1,标准输出,所以一般都省略。
而&号,后面接的是必须的文件描述符。
不能写成2>1,这样就成了标准错误重定向到文件名为1的文件中了,而不是重定向标准错误到标准输出中。
所以这里就是:标准输出重定向到了/dev/null,而标准错误又重定向到了标准输出,
所以就成了标准输出和标准错误都重定向到了/dev/null2>&1 >/dev/null
事实上, 命令行的重定向什么的, 是在执行命令之前就准备好了的。
解释顺序从左至右依次进行, 2>&1 ,而1是屏幕, 所以标准错误重定向到屏幕,
再而 1>/dev/null , 即标准输出重定向到 /dev/null, 上述2>&1 >/dev/null
并不是什么同一时刻要么产生标准输出要么产生标准错误. 而是两个不同的东西.用以下变量的方式做个解释,就很明显了,这两种方式是不同的,前者就像:
a=1
b=a而后者就像:
b=a
a=1&>/dev/null
# 这个就是,不管你是啥玩意儿文件描述符,通通重定向到/dev/null
整理
& 一般是表示产生一个子shell,即后台运行
但在这里的&是一个标志,是个规定,这个符号后面的数字代表一个文件描述符
&1 这表示标准输出
&2 标准错误输出
2>&1 将标准错误重定向到标准输出
实例
- 实例讲解
1 #!/bin/bash2 3 date +%F > 10194 date +% F 2> 1020date +%F 的标准输出是2017-10-19
date +% F 的标准输出是空,只有标准错误输出[root@localhost ~]# date +% Fdate: extra operand `F'Try `date --help' for more information.
1. 想要将错误输出重定向到文件直接重定向是不行的date +% F > 1020
2. 若要做的的话需要这样写date +% F 2> 1020
3. 假设这样写date +% F >&2 1020 #开始我这样写的,但这是错误的#因为这个意思是将标准输出重定向到标准输出,#而此时的标准输出为空,所以1020文件为空
- 实例中发现的问题
[root@localhost ~]# head 1 2==> 1 <==2222==> 2 <==1111[root@localhost ~]# awk '{print $0}' 1 222221111[root@localhost ~]# awk '{print $0}' 1 2>file2222[root@localhost ~]# awk '{print $0}' 1 2 >file
#这里就出现了一个有趣的现象,2后面的空格问题
#当2后面没有空格时,shell就默认2>为一体,识别为标准错误输出
#因为这里的文件名2与标准错误输出的文件描述符冲突了#当2后面有空格时,shell就识别2为文件名,作为awk的参数来处理
参考链接六神的CSDN
转载于:.html
本文标签: 标准输出和标准错误输出
版权声明:本文标题:标准输出和标准错误输出 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/p/1697130798a262053.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论