文件描述符
进程读文件之前,需要先打开文件,进程打开文件的时候,Linux会把这个文件关联到一个数字(称之为文件描述符),文件描述符是打开的文件在进程表中的一个索引。每个进程都有自己的一组已经打开的文件和各自的文件描述符,一旦打开某个文件,进程就可以通过文件描述符进行读写该文件。当进程不在需要文件的时候,它必须关闭文件,并且释放文件描述符。
Linux进程在启动的时候会打开3个文件:标准输入(文件描述符0),标准输出(文件描述符1),标准错误(文件描述符2)。
子进程会继承父进程的文件描述符,可以使用命令
ls /proc/self/fd
查看当前已经打开的文件描述符
exec n> outfile 表示打开一个输入文件outfile,并将他关联到文件描述符n;
exec m< infile 表示打开一个输入文件infile,并将它关联到文件描述符m上;
<& 和 >&
<& 和 >& 是文件复制符号
使用 exec n<&m 表示打开或者重定向文件描述符n,将其作为输入文件m的一个副本。
使用 exec n>&m 表示打开或者重定向文件描述符n,将其作为输出文件m的一个副本。
一个实例:
exec 4<&0 #使用4保存标准输入的副本
exec < $1 #重定向标准输入到文件1
exec 7>&1 #使用7保存标准输出
exec > $2 #重定向标准输出到文件2
cat - | tr a-z A-Z #将标准输入转换成大小输出到标准输出
exec 1>&7 7>&- # 使用7恢复标准输出,并关闭7
exec 0<&4 4<&- # 使用4恢复 标准输入,并关闭4
一个Shell重定向的笔记
原文:http://blog.csdn.net/diaorenxiang/article/details/39034499