日期:2014-05-16  浏览次数:20778 次

linux输出错误重定向
linux输出错误重定向

Linux Shell 环境中支持输入输出重定向,用符号"<"和">"来表示。0、1和2分别表示标准输入、标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出,比如 2>a.txt 表示将错误信息输出到文件a.txt中。
同时,还可以在这三个标准输入输出之间实现重定向,比如将错误信息重定向到标准输出,可以用 2>&1来实现。
Linux下还有一个非凡的文件/dev/null,它就像一个无底洞,所有重定向到它的信息都会消失得无影无踪。这一点非常有用,当我们不需要回显程序的所有信息时,就可以将输出重定向到/dev/null。
假如想要正常输出和错误信息都不显示,则要把标准输出和标准错误都重定向到/dev/null, 例如:
# ls 1>/dev/null 2>/dev/null
还有一种做法是将错误重定向到标准输出,然后再重定向到 /dev/null,例如:
# ls >/dev/null 2>&1
注重:此处的顺序不能更改,否则达不到想要的效果,此时先将标准输出重定向到 /dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,于是一切静静静:-)
另外 :
make >& make_log
意思是把标准输出和错误输出都重定向, make>out 只重定向标准输出!!!!!
>log 表示把标准输出重新定向到文件log中
>& log 表示把标准输出和错误输出都定向到文件log中,相当于 >log 2>&1
地址:http://blog.sina.com.cn/s/blog_671792fc0100z7j7.html



Linux:标准输入、输出、错误

1、文件描述符
文件 文件描述符
输入文件 0
输出文件 1
错误输出文件 2

2、将标准输出和错误输出重定向到同一个文件:2>&1

kevin@kevin:~/mybash$ cat test.sh

#/usr/bin/bash



name=kevin

echo $name

ipconfig

kevin@kevin:~/mybash$ ./test.sh > run.log

./test.sh: line 5: ipconfig:找不到命令

kevin@kevin:~/mybash$ ./test.sh > run.log 2>&1

kevin@kevin:~/mybash$ cat run.log

kevin

./test.sh: line 5: ipconfig:找不到命令

kevin@kevin:~/mybash$

3、将错误单独输出到文件

kevin@kevin:~/mybash$ ./test.sh 2>err.log

kevin

kevin@kevin:~/mybash$ cat err.log

./test.sh: line 5: ipconfig:找不到命令

kevin@kevin:~/mybash$

4、将错误输出到系统垃圾箱/dev/null,从而错误不出现在命令行界面上

kevin@kevin:~/mybash$ ./test.sh 2>/dev/null

kevin

kevin@kevin:~/mybash$






Linux Shell 环境中支持输入输出重定向,用符号 < 和 > 来表示。0、1和2分别表示标准输入、标准输出和标准错误信息输出,可以用来指定需要重定向的标准输 入或输出,比如 2>a.txt 表示将错误信息输出到文件a.txt中。

同时,还可以在这三个标准输入输出之间实现重定向,比如将 错误信息重定向到标准输出,可以用 2>&1来实现。

Linux下还有一个特殊的文件/dev/null,它就像一个无底 洞,所有重定向到它的信息都会消失得无影无踪。这一点非常有用,当我们不需要回显程序的所有信息时,就可以将输出重定向到/dev/null。

如 果想要正常输出和错误信息都不显示,则要把标准输出和标准错误都重定向到/dev/null, 例如:

# ls 1>/dev/null 2>/dev/null

还有一种做法是将错误重定向到标准输出,然后再重定向到 /dev/null,例如:

# ls >/dev/null 2>&1

注意:此处的顺序不能更改,否则 达不到想要的效果,此时先将标准输出重定向到 /dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,于 是一切静悄悄:-)

以上:http://blog.daviesliu.net/2005/08/31/200811/

以下转自:http://hi.baidu.com/lb_hb/blog/item/bfe6a4659e8877f6f73654bd.html
Chapter 16. I/O 重定向

默认情况下始终有3个"文件"处于打开状态, stdin (键盘), stdout (屏幕), and stderr (错误消息输出到屏幕上). 这3个文件和其他打开的文件都可以被重定向. 对于重定向简单的解释就是捕捉一个文件, 命令, 程序, 脚本, 或者甚至是脚本中的代码块(参见 Example 3-1 和 Example 3-2)的输出, 然后将这些输出作为输入发送到另一个文件, 命令, 程序, 或脚本中.

每个打开的文件都会被分配一个文件描述符.[1]stdin, stdout, 和stderr的文件描述符分别是0, 1, 和 2. 对于正在打开的额外文件, 保留了描述符3到9. 在某些时候将这些格外的文件描述符分配给stdin, stdout, 或者是stderr作为临时的副本链接是非常有用的. [2] 在经过复杂的重定向和刷新之后需要把它们恢复成正常的样子 (参见 Example 16-1).

1 COMMAND_OUTPUT >
2 # 重定向stdout到一个文件.
3 # 如果没有这个文件就创建, 否则就覆盖.
4
5 ls -lR > dir-tree.list
6 # 创建一个包含目录树列表的文件.
7
8 : > filename
9 # > 会把文件"filename"截断为0长度.
10 # 如果文件不存在, 那么就创建一个0长度的文件(与'touch'的效果相同).
11 # : 是一个占位符, 不产生任何输出.
12
13 > filename
14 # > 会把文件"filename"截断为0长度.
15 # 如果文件不存在, 那么就创建一个0长度的文件(与'touch'的效果相同).
16 # (与上边的": >"效果相同, 但是在某些shell下可能不能工作.)
17
18 COMMAND_OUTPUT >>
19 # 重定向stdout到一个文件.
20 # 如果文件不存在, 那么就创建它, 如果存在, 那么就追加到文件后边.
21
22
23 # 单行重定向命令(只会影响它们所在的行):
24 # --------------------------------
25
26 1>filename
27 # 重定向stdout到文件"filename".
28 1>>filename
29 # 重定向并追加stdout到文件"filename".
30 2>filename