输出重定向是指将程序的输出(标准输出、错误输出等)重定向到指定的位置,而不是默认的输出设备(通常是终端/控制台)。在 Unix/Linux 系统中,输出重定向通过使用符号 >
、>>
、2>
等来实现。
常见的输出重定向符号
-
标准输出重定向 (
>
):- 将命令的标准输出(即正常的输出信息)重定向到一个文件。如果文件存在,它将被覆盖。
- 示例:
这条命令将ls > filelist.txt
ls
命令的输出重定向到filelist.txt
文件中,如果文件已存在,它会被覆盖。
-
追加输出重定向 (
>>
):- 将命令的标准输出追加到一个文件的末尾,而不是覆盖文件内容。
- 示例:
这条命令将字符串echo "New line" >> filelist.txt
"New line"
追加到filelist.txt
文件的末尾。
-
标准错误输出重定向 (
2>
):- 将命令的标准错误输出(即错误信息)重定向到一个文件。如果文件存在,它将被覆盖。
- 示例:
这条命令试图列出一个不存在的目录,并将错误信息重定向到ls /nonexistent 2> errorlog.txt
errorlog.txt
文件。
-
标准输出和错误输出一起重定向 (
>&
):- 同时将标准输出和标准错误输出重定向到同一个文件。
- 示例:
这条命令将command > output.txt 2>&1
command
的标准输出和标准错误输出都重定向到output.txt
文件。
-
丢弃输出 (
/dev/null
):- 将输出重定向到
/dev/null
,这样输出就会被丢弃。 - 示例:
这条命令将command > /dev/null 2>&1
command
的所有输出(包括错误信息)都丢弃,不显示在终端上。
- 将输出重定向到
示例总结
- 输出到文件:
command > file.txt
- 追加到文件:
command >> file.txt
- 错误输出到文件:
command 2> error.txt
- 标准和错误输出到同一文件:
command > output.txt 2>&1
- 丢弃输出:
command > /dev/null 2>&1
通过输出重定向,用户可以灵活控制命令的输出,存储结果、调试程序或者避免不必要的输出干扰。
补充说明:
在命令 command > /dev/null 2>&1
中,2>&1
并不是直接针对 /dev/null
的,而是涉及标准输出和标准错误的重定向。
步骤解析:
-
command > /dev/null
:- 这部分表示将
command
的标准输出(1
)重定向到/dev/null
,也就是丢弃标准输出。
- 这部分表示将
-
2>&1
:- 这部分表示将
command
的标准错误输出(2
)重定向到标准输出(1
)所在的位置。在这条命令中,标准输出已经被重定向到了/dev/null
,所以标准错误输出也会被重定向到/dev/null
。
- 这部分表示将
总结:
command > /dev/null 2>&1
的效果是:
- 将
command
的标准输出丢弃(重定向到/dev/null
)。 - 将
command
的标准错误输出也重定向到/dev/null
(因为2>&1
将标准错误输出重定向到标准输出,而标准输出已经被重定向到/dev/null
)。
最终,command
的所有输出(标准输出和标准错误)都被丢弃,不会显示在终端上。