exec是shell的一个built-in command,一般用来execute某个command,然后退出该command,注意这里不是fork一个子shell,然后用该子shell来执行command,而是在当前shell上直接执行该command,所以command退出后,该shell也就结束了。

exec的另外一个功能是打开和关闭文件描述符,文件符range是0-9.

因为0是标准输入,1是标准输出,2是标准错误,所以没有特别缘由,我们使用3-9.

举例:

  1. exec 3</tmp/1.txt
    只读方式文件打开/tmp/1.txt文件,文件描述符对应为3
  2. exec 3>/tmp/1.txt
    写方式打开/tmp/1.txt,文件描述符对应为3
  3. exec 3<>/tmp/1.txt
    读写方式打开/tmp/1.txt,文件描述符对应为3
  4. exec 3<&-
    关闭文件描述符3

附录:常用文件重定向命令

command > filename                          把标准输出重定向到一个新文件中
command >> filename                        把标准输出重定向到一个文件中(追加)
command 1 > fielname                       把标准输出重定向到一个文件中
command > filename 2>&1                  把标准输出和标准错误一起重定向到一个文件中
command 2 > filename                       把标准错误重定向到一个文件中
command 2 >> filename                     把标准输出重定向到一个文件中(追加)
command >> filename 2>&1                把标准输出和标准错误一起重定向到一个文件中(追加)
command < filename >filename2          把command命令以filename文件作为标准输入,以filename2文件作为标准输出
command < filename                         把command命令以filename文件作为标准输入
command << delimiter                       把从标准输入中读入,直至遇到delimiter分界符
command <&m                                 把文件描述符m作为标准输入
command >&m                                 把标准输出重定向到文件描述符m中
command &m<&-                              关闭文件描述符m