Chinaunix首页 | 论坛 | 博客
  • 博客访问: 47753
  • 博文数量: 17
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 145
  • 用 户 组: 普通用户
  • 注册时间: 2011-05-31 09:37
文章分类

全部博文(17)

文章存档

2016年(3)

2015年(14)

我的朋友

分类: LINUX

2015-11-20 10:19:17

shell 输出重定向(> >> 2>&1)

1. 首先,bash中0,1,2三个数字分别代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即标准输入(0一般是键盘),标准输出(1一般是显示屏,准确的说是用户终端控制台),标准错误(2出错信息输出)
2、输入输出可以重定向,所谓重定向输入就是在命令中指定具体的输入来源,譬如 cat < test 将test重定向为cat命令的输入源。输出重定向是指定具体的输出目标以替换默认的标准输出,譬如ls > 1.txt将ls的结果从标准输出重定向为1.txt文本
34、到了此时,你应该也能猜到2>&1的用意了。不错,2>&1就是用来将标准错误2重定向到标准输出1中的。此处1前面的&就是为了让bash将1解释成标准输出而不是文件1

example:
1. 假如我们执行一个yum install -y gcc 操作, 我们不希望看到任何标准输出,但是会输出error 信息

yum install httpd xinetd syslinux tftp-server -y > /dev/null
file:///media/CentOS/repodata/repomd.xml: [Errno 14] Could not open/read file:///media/CentOS/repodata/repomd.xml
Trying other mirror.

2.假如我们执行一个yum install -y gcc 操作, 我们不希望看到错误输出,但是会输出标准 信息
yum install httpd xinetd syslinux tftp-server -y 2> /dev/null
Package tftp-server-0.49-7.el6.x86_64 already installed and latest version
Nothing to do

3. 把错误信息和标准信息都重定向
yum install httpd xinetd syslinux tftp-server -y > /dev/null 2>&1
yum install httpd xinetd syslinux tftp-server -y >& /dev/null

notes:

另外一个非常有用的重定向操作符是 "-",请看下面这个例子

$ (cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)
该命令表示把 /source/directory 目录下的所有文件通过压缩和解压,快速的全部移动到 /dest/directory 目录下去,这个命令在 /source/directory 和 /dest/directory 不处在同一个文件系统下时将显示出特别的优势。
下面还几种不常见的用法:
n<&- 表示将 n 号输入关闭 <&- 表示关闭标准输入(键盘) n>&- 表示将 n 号输出关闭 >&- 表示将标准输出关闭

其实就是

>/dev/null 2>&1 



2>&1 >/dev/null

的区别!

前者相当于:

stdout="/dev/null"
stderr=$stdout

所以标准错误和标准输出都重定向到了/dev/null


而后者相当于:
stderr=$stdout 
stdout="/dev/null"

标准错误指向了标准输出,而这时候标准输出并没有重定向到/dev/null,于是打印到了屏幕。
而标准输出则重定向到了/dev/null,不显示在屏幕上


阅读(847) | 评论(0) | 转发(0) |
0

上一篇:SHELL COMMAND习惯用法

下一篇:awk 习题总结

给主人留下些什么吧!~~