shell重定向

linux系统将每个对象当做文件来处理,者包括输入和输出的过程.Linux用文件描述符来标识每个文件对象,文件描述符是一个非负整数,可以唯一的表示会话中打开的文件.每个过程最多可以有9个文件描述符。出于特殊目的,bash sehll保留了最早的3个文件描述符 0 1 2 0=> STDIN, 1=>STDOUT,2=>STDERR,这三个特殊文件描述符会处理脚本的输入和输出(默认情况下通常是显示器),定向到相应的位置。

1STDIN

stdin文件代表shell的标准输入,对终端界面来说,标准输入是键盘,shell从stdin文件描述符对应的键盘获得输入,在用户输入的适合处理每个字符。

许多bash命令能接受STDIN的输入,尤其是在没有命令行上指定文件的话。

2016-06-09 15-43-26屏幕截图.png

当我们在命令行只输入命令自身的适合他会接受STDIN的输入,当我们在每行输入时,他会将每行现实在输出中,但是我们也可以通过STDIN重定向符号强制cat命令接受来自另一个费STDIN文件的输入。

2016-06-09 15-46-26屏幕截图.png

现在cat命令会用tt.log文件中的行作为输入,我们可以使用这种技术来向任何从STDIN接收数据的命令输入数据。

2STDOUT

stdout文件描述符代表标准的shell输出。在终端界面上,标准输出就是终端显示器,shell的所有输出(包括shell运行的程序和脚本)会被定向盗标准输出中,也就是显示器.默认情况下,很多bash命令会定向输出到STDOUT文件描述符,我们可以使用输出重定向来改变。

2016-06-09 15-51-43屏幕截图.png



通过输出重定向符号,通常会现实到显示器的所有输出会被shell重定向盗指定的重定向文件,我们也可乐怡将数据追加到某个文件,可以用>>符号来完成:

2016-06-09 15-54-04屏幕截图.png

如果对文件使用了标准的输出重定向,可能会遇到一个问题

2016-06-09 15-55-53屏幕截图.png

命令生成错误消息时,shell未将错误信息重定向到输出重定向文件,shell创建了输出重定向文件,但是错误信息却显示在屏幕上面,文件is exist but emptyshell

shell处理错误信息和处理普通输出是分开的,如果创建了在后台模式下运行的shell脚本,通常必须依赖发送到日志文件的输出消息.用这种方法,他们无法保存在日志中,需要更换方法来解决

3 STDERR

shell通过特殊的STDERR 文件描述符来处理错误信息,stderr文件描述符代表shell的标准错误输出,shell或者shell中运行的程序或者脚本出错时都生成会的错误信息都会发送到这个位置。

默认情况下,stderr文件描述符会和STDOUT文件描述符指向同样的地方,(尽管分给他们的文件描述值不一样),也就是说 默认信心也会输出到显示器输出中.

但是从上面的例子可以看出,重定向STDOUT并不会重定向STDERR,处理脚本时,我们往往想改变这种行为,特别是当我们向将错误信息保存到日志当中去的时候。

重定向错误会在后面的文章讲到。

每天都进步一些,日积月累之下,我们也会变成老司机!。





nickname
content