如何判断 exec 执行的命令是否成功运行?

Tim*_*Tim 1 bash

使用 运行命令时exec,父 shell 将在命令运行完成后退出。如何判断执行的命令是否exec成功运行?

Law*_*w29 5

当您成功使用时execexec'd 程序将替换您的外壳。这exec“d程序的退出状态被发送回执行你的shell父进程。

exec 的退出状态可以由以下行解释的唯一方法exec是 exec 调用失败,通常仅当请求的命令不存在或文件不可执行时。这不包括选项解析问题,因为这些问题在 exec 程序启动后就会被解析。

如果你想让你的 shell 解释一个程序的退出代码,你不能用exec它来做。只需在您的 shell 中运行该程序,当它完成时,您可以查看退出状态。

更多信息,您可以咨询 man 3 exec,这个或它的姊妹函数之一是您的 shell 调用的基本低级 Unix 函数。

我能想到的exec从 shell 命令行使用的唯一合理原因是在内存极低的机器上,其中 shell 使用的内存有问题,或者在有分叉问题的机器上,你很幸运有一个shell,你不能 fork 任何新进程,你只需要一个新进程来纠正问题。

exec 的正常使用是在 shell 脚本中,例如

  1. (感谢@chicks)在将控制台委托给不太受信任的用户的登录脚本中;当应用程序终止时,用户将无法控制您的 shell

  2. 在仅为 exec 程序设置前提条件(环境、ulimit)的 shell 脚本中,并且您希望 exec 程序的返回代码直接返回给调用您脚本的人。由于 exec 的进程是相同的 PID,脚本可以记录它。


小智 1

您可以使用执行的命令的退出状态来exec查看它是否有效,前提是该命令使用其自己的退出状态执行明智的操作,并且您想知道的内容足够简单,可以在退出状态中进行编码。

在我看来,就像bash exec保留了执行命令的 stdout 和 stderr 。我认为您可以使用执行的命令的输出来exec查看它是否有效。

在我看来,它也像bash检查要执行的命令的权限,因此如果您给它一个没有执行或读取权限的文件,您会得到一些输出。