呈现数据

标准文件描述符

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文件描述符重定向到文件。

原文地址:https://www.cnblogs.com/Caden-liu8888/p/6288056.html