首页 > 代码库 > 一个Shell重定向的笔记

一个Shell重定向的笔记

文件描述符
进程读文件之前,需要先打开文件,进程打开文件的时候,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重定向的笔记