首页 > 技术文章 > 文件描述和重定向

zzq919101 2016-11-17 11:06 原文

成功和不成功的命令

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

下面的命令会将stderr文本打印到屏幕上,而不是文件中(而且因为并没有stdout的输出,所以out.txt没有内容):

ls+>out.txt
ls:cannot access+:No such or directory

下面的命令中,我们将stderr重定向到out.txt:

ls+2>out.txt

 工作原理

就输出而言,>和>>并不相同。尽管两者可以将文本重定向到文件,但是前者会清空文件,然后在写入,而后者会将内容追加到文件现有的尾部。

当使用重定向操作符时,输出内容不会再终端打印,而是被导向文件,重定向操作符默认使用标准输出。如果使用特定的文件描述符,你必须将描述符编号置于操作符前。

>等同于1>;对于>>来说,情况也类似(即>等同于1>>)。

自定义文件描述符

文件描述符是一种用于访问的文件的抽象指示器(abstract indicator)。存取文件离不开称为“文件描述符”的特殊数字。0、1、2分别是stdin,stdout,stderr的预留描述符编号。

我们可以使用exec命令创建自己的文件描述符。

操作符用于从文件中读取至stdin中,>操作符用于截断模式的文本写入(数据在目标文件内被截断之后写入)。>>用于追加模式写入,(数据被添加到文件的现有内容中,而且目标文件中的内容不会丢失)

创建一个文件描述符进行文件读取:

exec 3<input.txt#使用文件描述符3打开并读取文件

我们可以这样:

1 echo this is a test line>input.txt
2 echo 3<input.txt

现在你就可以在命令中使用文件描述3了

cat<&3

如果再次读取,我们就不能使用文件描述3了,而是需要再次使用exec重新分配文件描述符3来进行二次读取。

创建一个文件描述符用于写入(截断模式):

1 exec 4>ouput.txt#打开文件进行写入

例如:

1 exec 4>output.txt
2 echo newline>&4
3 cat output.txt

创建一个文件描述符用于写入(追加模式):

exec 5>>input.txt

例如:

1 & exec 5>>input.txt
2 & echo appended line>&5
3 & cat input.txt
4 newline
5 appended lin

 

推荐阅读