Shell自定义输入输出文件描述符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell自定义输入输出文件描述符相关的知识,希望对你有一定的参考价值。
参考技术A Linxu系统将每个对象当作文件处理,这包括输入和输出进程。Linux用文件描述符(file descriptor)来标识每个文件对象。文件描述符是一个非负整数,可以唯一标识会话中打开的文件。shell保留了3个标准文件描述符:0,1,2,如下列表所示:通过exec命令使shell在脚本执行期间将日志重定向某个特定文件描述符
在命令行执行脚本文件结果:
通过exec命令来给输出分配文件描述符
在命令行执行脚本文件结果如下:
在命令行执行脚本文件结果如下:
在命令行执行脚本结果如下:
Linux shell标准输入,标准输出,错误输出
文件文件描述符
标准输入是文件描述符0。它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。
标准输出是文件描述符1。它是命令的输出,缺省是屏幕,也可以是文件。
标准错误是文件描述符2。这是命令错误的输出,缺省是屏幕,同样也可以是文件。
重定向的使用有如下规律:
1)标准输入0、输出1、错误2需要分别重定向,一个重定向只能改变它们中的一个。
2)标准输入0和标准输出1可以省略。(当其出现重定向符号左侧时)
3)文件描述符在重定向符号左侧时直接写即可,在右侧时前面加&。
4)文件描述符与重定向符号之间不能有空格!
command < filename 把标准输入重定向到filename文件中
command 0< filename 把标准输入重定向到filename文件中
command > filename 把标准输出重定向到filename文件中(覆盖)
command 1> fielname 把标准输出重定向到filename文件中(覆盖)
command >> filename 把标准输出重定向到filename文件中(追加)
command 1>> filename 把标准输出重定向到filename文件中(追加)
command 2> filename 把标准错误重定向到filename文件中(覆盖)
command 2>> filename 把标准输出重定向到filename文件中(追加)
command > filename 2>&1 把标准输出和标准错误一起重定向到filename文件中(覆盖)
command >> filename 2>&1 把标准输出和标准错误一起重定向到filename文件中(追加)
command < filename >filename2 把标准输入重定向到filename文件中,把标准输出重定向
到filename2文件中
command 0< filename 1> filename2 把标准输入重定向到filename文件中,把标准输出重定向
到filename2文件中
下面还几种不常见的用法:
n<&- 表示将 n 号输入关闭
<&- 表示关闭标准输入(键盘)
n>&- 表示将 n 号输出关闭
>&- 表示将标准输出关闭
/dev/null 代表空设备文件
- 1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
- 2>&1 接着,标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr标准错误& 表示等同于的意思,2>&1,表示2的输出重定向等同于1,即和1重定向的文件系统上的位置是一样的
以上是关于Shell自定义输入输出文件描述符的主要内容,如果未能解决你的问题,请参考以下文章