在Shell中,重定向是一种改变命令输入输出流向的标准机制。它允许我们将命令的执行结果(标准输出或错误输出)发送到文件或其他命令,而非默认的终端屏幕,或者将文件内容作为命令的输入(标准输入)。以下是Shell中常见的几种重定向操作:
标准输出重定向:
command > file
:将命令command
的标准输出(STDOUT,文件描述符为1)重定向到名为file
的文件中,如果file
已存在,则会被覆盖。command >> file
:追加重定向,将命令的标准输出附加到file
的末尾,不会覆盖原有内容。
标准错误输出重定向:
command 2> file
:将命令的错误输出(STDERR,文件描述符为2)重定向到file
,同样会覆盖文件内容。command 2>> file
:将错误输出追加到file
的末尾。
同时重定向标准输出和错误输出:
command > file 2>&1
:首先重定向标准输出到file
,然后通过2>&1
把标准错误输出重定向到与标准输出相同的流,因此错误信息也会被写入到file
中。command &> file
:这是bash中的简写形式,相当于上面的两个重定向合在一起。
屏蔽输出:
command > /dev/null
:将命令的标准输出丢弃,不显示在屏幕上,因为/dev/null
是一个黑洞设备,任何写入它的数据都会被忽略。command 2>/dev/null
或command &>/dev/null
:同理,用于丢弃错误输出或所有输出。
重定向输入:
command < file
:将command
的输入来源从键盘更改为file
的内容,即读取file
作为命令的标准输入(STDIN,文件描述符为0)。
管道(pipe):
command1 | command2
:使用管道符号|
可以将command1
的标准输出作为command2
的标准输入,形成命令间的流水线式处理。
这些重定向机制极大地增强了Shell脚本和命令行工具的灵活性,使得我们可以根据需要定制数据流的走向,便于日志记录、数据处理和程序调试等任务。