Linux Shell 文件描述符stdin,stdout,stderr,重定向

Linux Shell 文件描述符stdin,stdout,stderr,重定向

系统保留的三个文件描述符分类

0 标准输入 stdin		/dev/stdin
1 标准输出 stdout 	/dev/stdout
2 标准错误 stderr	/dev/stderr

对文件描述符进行重定位(重定位运算符)

>  替换原有内容
>> 内容追加到末尾
重定位运算符 ">" ">>" 的默认参数为标准输出 stdout ,即 1 ;也就是说 >>> 默认只接收 stdout 。
所以 ">" 等价于 "1>"; ">>" 等价于 "1>>",也就是说 ls > out.log 就是 ls 1> out.log 
注意 1和>之间不能有空格,使用数字来重定向都不能有空格。

解释:
(0)、何为标准输入和标砖输出

标准输入: /dev/stdin 文件里面的数据
标准输出: /dev/stdout 文件里面的数据

(1)、当我们输入“输出指令”,例如 ls, echo 等返回的信息归为stdout;

比如:
ls > out.log
cat out.log
有内容

比如:
ls + > out2.log
ls: 无法访问+: 没有那个文件或目录
cat out2.log
空的,为什么呢?那显然返回的内容不是stdout,而是stderr,我们可以使用 $? 获取最后一条命令执行的返回值,
当返回值为零代表命令执行成功。
ls + > out2.log
echo $?
2
那么我们可不可以把标准错误重定向到标准输出呢,答案是可以的,2>&1 一般写在后面,表示如果出错了就重定向,
作为一种补救措施,毕竟谁也不能预知错误。
ls + > out3.log 2>&1
cat out3.log
ls: 无法访问+: 没有那个文件或目录

或者使用 &>
ls + &> out3.log

(2)、可以同时重定向stdout与stderr到指定的文件

cat out*.log 2>stderr.txt 1>stdout.txt

(3)、将stderr/stdout重定向到无底洞 /dev/null

ls + > /dev/null 2>&1
如果命令执行成功则将 stdout 定向到 /dev/null ,如果执行失败,则将 stderr 定向到 stdout 然后 
stdout 定向到 /dev/null
发布了412 篇原创文章 · 获赞 25 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/raoxiaoya/article/details/103513429