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文本
3、4、到了此时,你应该也能猜到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) |