Bootstrap

文件描述符和重定向

文件描述符是文件输入、输出相关联的整数。它们用来跟踪已打开的文件。最常见的是stdin\stdout\stderr。

使用文件描述符的重要原因:当命令输出文本的时候,这些输出信息有可能是错误信息,也可能是正常的(非错误的)输出信息。单靠查看输出的文本本身,我们没法区分那些是正常的输出文本,哪些是错误文本。不过我们可以通过文件描述符来解决这个问题,将那些与特定描述符关联的文本提取出来。

文件描述符是与一个打开的文件或者数据流相关联的整数。描述符0,1,2系统预留。

0---标准输入,1---标准输出,2---标准错误。

接下来我们实战演练:

用下面的方法可以将输出文本重定向或者保存到一个文件中:

echo "this is a sample text 1" > /opt/text.txt

这种方法通过截取文件的方式,将输出文本存储到文件text.txt中,也就是说把echo命令的输出写入文件之前,把text.txt中的内容首先会被清空。

接下来,我们看另外一个例子,

echo "this is a sample text 2" >> /opt/text.txt

这种方法会将文本追加到目标文件中。

>和>>并不相同。尽管这两个操作符都可以将文本重定向到文件,但前者会先清空文件,再写入内容;而后者会将内容追加到文件的尾部。

cat /opt/text.txt

当使用重定向操作符时,重定向的内容不会出现在终端,而是直接被导入文件。重定向操作符默认使用标准输出。如果想使用特定的文件描述符,你必须将描述符置于操作符之前。

来看看什么是标准错误以及如何对它重定向。当命令输出错误信息时,stderr信息就会被打印出来。

ls +

这里+是个非法参数,因此返回错误信息。

➕:成功和不成功的命令:当一个命令发生错误并退回时,它会返回一个非0的退出状态;而当命令成功完成后,它会返回数字0。退出状态可以从特殊字符变量$?中获得(在命令执行之后立刻运行echo $?,就可以打印退出状态)。

下面命令会将stderr文本打印到屏幕上,而不是文件中。

ls + > out.txt

然而,在命令中,stdout没有任何输出,因此会生成空文件。

ls + 2> out1.txt   #正常运行

有点困了,明天还得搬砖。今天先写到这里,明天继续。

;