进程预定义了三个文件描述符,分别是STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO。分别是标准输入,标准输出,标准错误输出。
例如:
$cat file1 默认输出是标准输出
$tee 默认从标准输入读入
$noexistcommand
现在我们不想对上面三个输入输出走默认的途径,例如我要输出到文件中去;我要从文件中读取,而不是标准输入;我不想在终端打印错误怎么办呢?
$cat file1 > output.txt 将输出重定向到文件中,这个命令等同于 $ cat file1 1> output.txt
$tee < input.log 将输入重定向到input.log, 这个命令等同于 $tee 0< input.log
$noexistcommand 2> err.txt
来点更为复杂的例子:
$tee < input.log >output.log 输入来自input.log,输出到output.log
书中有个例子挺好:
./a.out > outfile 2>&1
将标准输出重定向到outfile,标准出错重定向到&1,而标准输出已经重定向到outfile,即标准输出和标准出错都重定向到outfile中。
./a.out 2>&1 > outfile
首先讲标准错重定向到标准输出,再将标准输出重定向到了outfile。这样标准错误将与标准输出相关联,标准错误与outfile相关联。标准错误输出到终端,标准输出将写到outfile中。