【问题标题】:Checking the return value of a C program in a bash script?在 bash 脚本中检查 C 程序的返回值?
【发布时间】:2011-01-19 13:58:35
【问题描述】:

我有一个 bash 脚本,我在其中使用 $? 检查上次运行命令的退出代码?变量,但现在我正在执行一个 C 程序(来自该脚本),如果程序成功执行,则返回 0。有什么方法可以在我的 bash 脚本中捕获 C 程序的这个返回值?

我相信 awk、sed 等不同的命令是用 C 编写的。它们如何使用 $?将他们的退出代码存储在其中?如何让我的 C 程序将其退出代码存储在 $??

我希望我的问题很清楚。

【问题讨论】:

    标签: c linux bash


    【解决方案1】:

    bash 自动捕获$? 中的退出代码。或者,如果您只关心零/非零,您可以使用if 中的命令。

    【讨论】:

      【解决方案2】:

      没有必要做任何事情 - 如果你的 C 程序返回 0,那将存储在执行它的 shell 的 $? 变量中。

      【讨论】:

      • 退出状态被限制为只有 8 位,所以只有程序返回的最低 8 位最终会存储在 $?
      • @Chris Dodd - 无论如何,POSIX 将返回值限制在 0 到 255 之间,因此 8 位存储在那里不是问题,这是一种优化。
      【解决方案3】:

      C程序的返回码是int main()函数的返回值或exit()函数的参数。然后系统通过wait() 系统调用使其对父进程可用。当父进程为bash 时,该值将通过$? 变量提供。

      【讨论】:

      • 是什么让你认为涉及 errno?
      • 我假设使用fork() 创建了一个新进程,并且它的手册页提到了这一点。我错了吗?
      • 好吧,Windows(我使用 bash)没有 fork()。在超过 25 年的 UNIX 编程中,我从未见过任何关于 errno 与进程的退出值相关联的建议。我不是说你错了,但在说你是对的之前,我需要章节和诗句。
      • 经过进一步研究,我发现我错了。子进程的退出代码由其父进程通过 wait() 系统调用检索。我说的是 Unix,我不知道 Windows。我编辑我的答案。感谢您的干预。
      猜你喜欢
      • 2018-04-20
      • 2012-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      相关资源
      最近更新 更多