在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脚本和命令行工具的灵活性,使得我们可以根据需要定制数据流的走向,便于日志记录、数据处理和程序调试等任务。