在 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 中运行,并且调用脚本中它后面的命令仍将运行。
对我来说,这表明这两种用途实际上应该是两个单独的命令。