记linux输出重定向操作>&
作者:matrix 被围观: 5,445 次 发布时间:2019-10-19 分类:command Linux | 一条评论 »
今天看到2>&1
和>/dev/null 2>&1
有点相似但又完全不同,一直都是CV方式来使用 仅知道后者用于禁止所有输出信息。
简单整理笔记
基本操作符号和数字描述符号
>
用于输出覆盖内容,>>
用于输出追加内容
<
用于输入,<<
用于设置输入结束符号
<<end
:表示当输入end
的时候结束输入操作
/dev/null
表示Linux中的空设备,也当是数据黑洞,无限吞噬。
类型 | 文件描述符 | 默认情况 | 对应文件句柄位置 |
---|---|---|---|
标准输入(standard input) | 0 | 从键盘获得输入 | /proc/self/fd/0 |
标准输出(standard output) | 1 | 输出到屏幕(即控制台) | /proc/self/fd/1 |
错误输出(error output) | 2 | 输出到屏幕(即控制台) | /proc/self/fd/2 |
输出内容重定向
command >/dev/null 2>&1
这样执行就不会有任何信息显示和保存
补充命令之后:
command 1>/dev/null 2>&1
说明:
>/dev/null
等同于1>/dev/null
意思是 当前控制台的信息输出到空设备。
2>&1
使用&
符号将2重定向绑定到1,意思是将错误信息指向控制台,而这个时候的控制台又指向了空设备。
如果去掉&
符号的2>1
会导致错误信息输出到文件名为1
里面。
Linux执行命令时会按顺序从左到右读取来确定0,1,2这三个输入输出的位置。
command 2>&1 >/dev/null
把两个重定向的位置写反之后就是完全不同的意思。
等同于command 2>&1 1>/dev/null
linux执行命令到2>&1
会将错误输出指向1即控制台,到这里就会完成错误输出(2)的位置确定。也就不会更改了。
执行到1>/dev/null
会将标准输出(1)指向空设备,而此时的错误输出(2)已经确定位置了就不会发生更改。
所以最终错误信息显示到控制台,正常信息不会看到。
参考:
https://blog.csdn.net/zhaominpro/article/details/82630528
https://www.cnblogs.com/ultranms/p/9353157.html
https://blog.csdn.net/wz947324/article/details/80005224
非技术的路过。