引言

在linux中借助shell等命令行工具能够很方便地与操作系统交互,可以在shell中将命令或程序的输入结果重定向到特定地方,很方便地实现一些功能。这个技巧十分实用,使用输出重定向能够极大地简化我们的日常操作。

使用尖括号完成重定向

示例如下,运行下面的命令能够把 ls 命令的运行结果写入到 ls-output.txt 中。使用 > 会把程序运行时本该输出到 stdout 的内容重定向到指定名称的文件中。

ls . > ls-output.txt

可以在 > 左面写上数字和 & ,用以标识在重定向时的特殊用法。下面会给出一些特殊用法的实例。

重定向 stdout 到指定文件中

ls . 1> ls-output.txt

重定向 stderr 到指定文件中

ls . 2> ls-error.txt

stdoutstdout 合并再重定向到指定文件中

ls . 2>&1 ls-output-and-error.txt

以下命令具有相同的效果

ls . &> ls-output-and-error.txt

将程序的输出丢掉

可以将输出重定向到一个特殊的文件 /dev/null ,所有写入到这个文件的内容都会被丢弃掉。

program > /dev/null

将输出追加到指定文件尾部

使用一个尖括号( > )能够将输出重定向到文件中,在写入文件时会覆盖掉其中的内容。如果想保留文件中的原始内容,则可以用两个尖括号( >> ),这样就能将输出追加到文件的尾部。示例代码如下:

echo test >> file-output.txt

使用管道完成重定向

使用管道符号 | 能够将一个程序的输出重定向到另一个程序的输入中去。下面的命令会将 ls 的输出( stdout )重定向到 grep 的输入( stdin )中去。管道命令在linux中是最常见的用法。

ls | grep <pattern>