为什么使用exec命令进行文件描述符重定向?

为什么使用exec命令进行文件描述符重定向?

在 UNIX shell 中,Bash 和 Korn shell 等exec有两种特定用途。

它的用途是用另一个程序替换当前程序,就像是exec prog可以理解的。该名称exec是基于的 C 系列例程的缩写execve

如果我正在编写一个 shell 并且想要一个命令来打开一个文件那么我可能会调用它open,但不,Bash 和 Korn shellexec再次使用,例如exec 3<file

为什么这个exec命令被重新用于完全不同的事情?

答案1

其实并没有太大的不同:你可以使用重定向一个命令

bash -c 'exec date > date.out' ; cat date.out

为什么不在没有命令的情况下使用它

bash -c 'exec > date.out; date' ; cat date.out

答案2

我已经迟了四年了,但我一直在亲自关注这个问题。

请注意,您需要小心 Glenn 的回答,因为在您使用 exec 与命令和重定向的情况下,结果只是重定向。

所谓的“exec'd”命令将在子 shell 中运行,并且调用脚本中它后面的命令仍将运行。

对我来说,这表明这两种用途实际上应该是两个单独的命令。

相关内容