shell的输出重定向
引言
在linux中借助shell等命令行工具能够很方便地与操作系统交互,可以在shell中将命令或程序的输入结果重定向到特定地方,很方便地实现一些功能。这个技巧十分实用,使用输出重定向能够极大地简化我们的日常操作。
使用尖括号完成重定向
示例如下,运行下面的命令能够把 ls
命令的运行结果写入到 ls-output.txt
中。使用 >
会把程序运行时本该输出到 stdout
的内容重定向到指定名称的文件中。
ls . > ls-output.txt
可以在 >
左面写上数字和 &
,用以标识在重定向时的特殊用法。下面会给出一些特殊用法的实例。
重定向 stdout
到指定文件中
ls . 1> ls-output.txt
重定向 stderr
到指定文件中
ls . 2> ls-error.txt
将 stdout
和 stdout
合并再重定向到指定文件中
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>