/dev/null 2>&1的意思(可以直接参考shell重定向那篇,/dev/null是空设备)
2013-11-11 11:21
501 查看
路还长 别太狂 以后指不定谁辉煌
2>&1 和 &> 的解释
Linux的IO输入输出有三类
Standard Input 代码 0
Standard Output 代码 1
Standard Error 代码 2
ls thereisno 1> out.txt 标准输出重定向 也可以不加1写成 ls thereisno > out.txt
ls thereisno 2> out.txt 标准错误重定向
ls thereisno > out.txt 2>&1 把错误定向到标准输出,然后统一重定向.但这是所有“输出”重定向(&>中的&后可以是任意1,2),不能重定向“输入”的内容
ls thereisno &> out.txt 所有IO重定向(&>中的&可以代表任意,0,1,2,3……)
举个例子:ls
将前面执行结果的标准输出流写入success.txt文件,省略1,等同于ls
而执行出现的错误用2 定向,2>error.txt。用&1表示和1绑定到一起,输出到一个文件,用&表示绑定到某一个文件标示符指定的文件。&-表示关闭。
如果后面什么都不写,ls
[b]
/dev/null 2>&1 :命令的意思是将标准输出和错误输出全部重定向到/dev/null中,也就是将产生的所有信息丢弃.
/dev/null 代表空设备文件
> 代表重定向到哪里,例如:echo "123" > /home/123.txt
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
”>/dev/null 2>&1″ 也可以写成 “1>/dev/null 2>&1″。命令的执行过程:
1>/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 :接着,标准错误输出重定向到标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
简单地说command > file 2>file 与command > file 2>&1 有什么不同的地方.
首先~command > file 2>file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file 中.command > file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file
的管道.
而command >file 2>&1 这条命令就将stdout直接送向file,stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容.
从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会用command > file 2>&1 这样的写法.
2>&1 和 &> 的解释
Linux的IO输入输出有三类
Standard Input 代码 0
Standard Output 代码 1
Standard Error 代码 2
ls thereisno 1> out.txt 标准输出重定向 也可以不加1写成 ls thereisno > out.txt
ls thereisno 2> out.txt 标准错误重定向
ls thereisno > out.txt 2>&1 把错误定向到标准输出,然后统一重定向.但这是所有“输出”重定向(&>中的&后可以是任意1,2),不能重定向“输入”的内容
ls thereisno &> out.txt 所有IO重定向(&>中的&可以代表任意,0,1,2,3……)
举个例子:ls
test
.sh test1.sh >success.txt
2>&1
将前面执行结果的标准输出流写入success.txt文件,省略1,等同于ls
test
.sh test1.sh 1>success.txt
而执行出现的错误用2 定向,2>error.txt。用&1表示和1绑定到一起,输出到一个文件,用&表示绑定到某一个文件标示符指定的文件。&-表示关闭。
如果后面什么都不写,ls
test
.sh test1.sh,[b]默认输出到屏幕上。[/b]
[b]
&>代表全部输出流一起重定向。[/b]
/dev/null 2>&1 :命令的意思是将标准输出和错误输出全部重定向到/dev/null中,也就是将产生的所有信息丢弃.
/dev/null 代表空设备文件
> 代表重定向到哪里,例如:echo "123" > /home/123.txt
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
”>/dev/null 2>&1″ 也可以写成 “1>/dev/null 2>&1″。命令的执行过程:
1>/dev/null :首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
2>&1 :接着,标准错误输出重定向到标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
简单地说command > file 2>file 与command > file 2>&1 有什么不同的地方.
首先~command > file 2>file 的意思是将命令所产生的标准输出信息,和错误的输出信息送到file 中.command > file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file
的管道.
而command >file 2>&1 这条命令就将stdout直接送向file,stderr 继承了FD1管道后,再被送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容.
从IO效率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会用command > file 2>&1 这样的写法.
相关文章推荐
- /dev/null 2>&1的意思(可以直接参考shell重定向那篇,/dev/null是空设备)
- shell脚本修复MySQL主从同步
- 检查ftp备份数据完整性及短信告警的shell脚本
- 心路历程————LinuxBash
- shell编程之until循环语句
- shell脚本报错:"[: =: unary operator expected"
- Shell 之循环
- Linux Shell笔记之输入与输出
- 使用 shell 脚本对 Linux 系统和进程资源进行监控
- shell:syntax error:unexpected end of file/Starting proxy www-balancer: cannot bind socket--转载
- Shell 问题记录
- SHELL中&&与||的区别
- 启动bash shell 的几种方式
- linux shell 编程指南第一章-----文件安全与权限
- Shell之结构判断
- WinExec、ShellExecute和CreateProcess及返回值判断方式
- Linux 学习手记(4):Linux系统常用Shell命令
- Shell之比较运算符
- adb shell 命令详解
- import-csv 一些实际应用