首页 > 解决方案 > 在 Makefile 中回显退出代码

问题描述

我已经检查了一些关于 SO 的帖子,但无法得到我想要的答案。

我想将 Stata 脚本作为 Makefile 的一部分运行。所以在我的一个目标中,我定义

live_data:
    @echo "Executing Stata code"
    StataIC -e 'stata_code.do'
    @exit_status=$?
    @echo "Finished execution of Stata code."
    @echo Code finished with exit code of $(exit_status)

但是,每当我查看make all命令的输出(包括live_data)时,我都会看到

Executing Stata code
StataIC -e stata_code.do'
Finished execution of Stata code.
Code finished with exit code of 

基本上,该变量exit_code始终为空。

但是,如果我弹出一个终端并简单地运行and ,我会StataIC -e stata_code.do得到正确的结果(0 或 1)。有人可以指出我在这里缺少什么吗?exit_status=$?echo $exit_status

标签: bashshellmakefile

解决方案


请注意,您可以简化配方,这样您就不需要保存$?.

live_data:
    @echo "Executing Stata code"; \
      StataIC -e 'stata_code.do'; \
      printf '%s\n' "Finished execution of Stata code." \
                    "Code finished with exit code of $$?"

printf在这里,两个字符串都是在 之后立即调用的单个字符串的参数StataIC,因此$?正确地引用了 的退出状态StataIC


推荐阅读