标准文件描述符
1.linux系统将每个对象当做文件来处理,每一个过程一次最多可以有9个文件描述符。
文件描述符 | 缩写 | 描述 |
0 | STDIN | 标准输入 |
1 | STDOUT | 标准输出 |
2 | STDERR | 标准错误 |
STDIN文件描述符代表shell的标准输入。对终端界面来说,标准输入就是键盘。
在使用输入重定向符号(<)时,linux会用重定向指定的文件来替换标准输入文件描述符。。
注意:在命令行上只输入cat命令时,它会接受STDIN的输入。当你在每行输入时,cat命令会将每行显示在输出中。
STDOUT
STDOUT文件描述符代表标准的shell输出。对于终端界面,标准输出就是终端显示器。
ls -l > testfile
输出重定向到文件,会覆盖文件中的原有内容。
将数据追加到某文件。可以用">>"符号来完成:
who >> testfile
STDERR
shell通过特殊的STDERR文件描述符来处理错误消息。
重定向错误
1.只重定向错误
我们知道STDERR文件描述符被设成2. 只重定向错误消息,将该文件描述符值放在重定向符号前,该值必须紧紧地放在重定向符号前。否则不会工作。
ls -al badfile 2> testfile
2.重定向错误和数据
如果你想重定向错误和正常输出,必须使用两个重定向符号。你需要在想要重定向的每个数据前添加对应的文件描述符,并将它们指向对应的保存数据的输出文件。
ls -al for_test myprog test1 test2 2> testfile 1> test3
上面就是,把错误信息输出到testfile中,正确数据输出到test3中
可以利用该方法将脚本的正常输出和脚本生成的错误消息分离开来。
如果将STDERR和STDOUT的输出重定向到同一个输出文件。为此shell提供了特殊的重定向符号&>
ls -al for_test myprog test1 test2 &> testfile
当使用&>符时,命令生成的所有输出都会发送到同一位置,包括数据和错误。
注意:bash shell会自动给错误信息分配较标准输出来更高的优先级。(你会发现错误消息在一处,不用翻遍整个输出文件)
如果在脚本中生成错误消息,可以将单独的一行输出重定向到STDERR。你可以利用输出重定向符来将输出重定向到STDERR文件描述符。
在重定向到文件描述符时,你必须在文件描述符数字之前加一个(&):
echo "This is an error" >&2
记住:默认情况下linux会将STDERR定向到STDOUT。
正常运行脚本文件,没有啥区别
./test8 2> test9
这样的脚本中所有定向到STDERR的文本都会被重定向。
永久重定向
如果脚本中有大量数据需要重定向,那重定向每个echo语句就会很烦琐。用exec命令告诉shell在脚本执行期间重定向某个特定文件描述符。
如:
exec 1>testout echo "This is a test of redirecting all output" echo "from a script to another file." echo "without having to redirect every individual line"
exec命令会启动一个新shell并将STDOUT文件描述符重定向到文件。
原文:http://www.cnblogs.com/Caden-liu8888/p/6288056.html