如何在位烘烤配方上捕获命令的退出代码?

电子的

我已经烤了一个食谱,在该食谱中,我需要先检查远程服务器的可用性,然后再从中下载一些软件包。为此,我将使用ping如下:

ping ${HOST} -c1 -w4 1>/dev/null 2>/dev/null
if [ $? -ne 0 ]; then
    echo "ERROR: Unable to reach ${HOST}. Exiting now with code $?..."
    exit $? 
fi

上面的代码在终端中正常工作,我将获得相应的退出代码:0表示OK,非零表示NOK。

但是,在烘烤食谱上完全相同的代码,退出代码$?始终为空。取而代之的是,bitbake本身将捕获错误代码,并且继续执行。尝试解压缩未下载的文件时,它将在很多以后失败。到那时,我收到了有关ping更早抛出的非零退出代码的警告。当前的样子:

if [ "$(ping ${HOST} -c1 -w4 1>/dev/null 2>/dev/null)" = 0 ]; then
    echo "ERROR: Unable to reach ${HOST}. Exiting now..."
    exit 1 
fi

# Some other stuff here...

ar -x ${BUILDDIR}/tmp/deploy/ipk/all/rheas_*.ipk

我得到:

ERROR: rheas-0.0-r0 do_compile: Function failed: do_compile (log file is located at /data/oe-core/build/tmp/work/armv5te-poky-linux-gnueabi/rheas/0.0-r0/temp/log.do_compile.2239)
ERROR: Logfile of failure stored in: /data/oe-core/build/tmp/work/armv5te-poky-linux-gnueabi/rheas/0.0-r0/temp/log.do_compile.2239
Log data follows:
| DEBUG: Executing shell function do_compile
| ar: /data/oe-core/build/tmp/deploy/ipk/all/rheas_*.ipk: No such file or directory
| WARNING: exit code 9 from a shell command.
| ERROR: Function failed: do_compile (log file is located at /data/retail-renos-oe-core/build/tmp/work/armv5te-poky-linux-gnueabi/rheas/0.0-r0/temp/log.do_compile.2239)
ERROR: Task (/data/oe-core/meta-renos/recipes-core/rheas/rheas_0.0.bb:do_compile) failed with exit code '1'

总之,我自己不能使用退出代码,因为看来bitbake正在以某种方式劫持它。

这样做的问题是我无法抛出用户友好的错误,而其他人则永远不知道问题的出处。

所以我的问题是,如何在烘焙食谱中使用退出代码?

特别是在这个项目中,我使用的是bitbake版本1.32.0。

答案似乎不在手册中。提前致谢!

朱西·库科宁

set -e默认情况下,bitbake使用更安全:脚本在第一个错误时停止执行。

您可以(使用set +e禁用此功能,但我建议改为专门处理单个已知失败的命令。有几种方法可以做到,这是一个示例(这还修复了代码中的错误,该错误使用echo的退出值作为退出值):

err=0
ping ${HOST} -c1 -w4 1>/dev/null 2>/dev/null || err=$?
if [ $err -ne 0 ]; then
    echo "ERROR: Unable to reach ${HOST}. Exiting now with code $err..."
    exit $err 
fi

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

捕获退出命令的退出代码

来自分类Dev

如何在Makefile中捕获命令退出代码以供以后使用?

来自分类Dev

如何在shell命令或单行脚本上生成所需的退出代码?

来自分类Dev

如何使“本地”捕获退出代码?

来自分类Dev

SSH捕获远程ssh命令的退出代码

来自分类Dev

捕获退出代码和命令输出

来自分类Dev

如何在if语句中检查命令退出代码

来自分类Dev

如何提取命令的退出代码?

来自分类Dev

如何在自定义Django命令上返回非零退出代码,同时能够对其进行测试?

来自分类Dev

如何在使用开放源代码配方构建的HUB上安装Rappture Java绑定?

来自分类Dev

bash-从远程ssh命令捕获退出代码

来自分类Dev

我们如何在python中运行bash脚本时捕获bash脚本的退出代码

来自分类Dev

Bash:如何在使用微调器时获取命令的退出代码?

来自分类Dev

如何在Symfony2命令中设置退出状态代码?

来自分类Dev

使用条件执行时,如何在Windows上访问退出代码先前命令?

来自分类Dev

如何在位图(Winforms)上绘制清晰的文本?

来自分类Dev

如何在位图图像上绘制对数轴

来自分类Dev

如何捕获管道中非最终命令的退出状态?

来自分类Dev

命令|| 运行代码并退出

来自分类Dev

捕获Expect脚本的退出代码

来自分类Dev

如何在Shell脚本中捕获退出1信号?

来自分类Dev

Bash陷阱命令未能捕获致命的PHP脚本退出代码255

来自分类Dev

如何在Windows上退出Nodemon

来自分类Dev

如何在Windows上退出Nodemon

来自分类Dev

如何在退出帧上获取MessageDialog?

来自分类Dev

如何从失败的命令返回退出代码0

来自分类Dev

如何解决错误:“命令以代码1退出”?

来自分类Dev

如何运行命令并以更少的字符获取退出代码?

来自分类Dev

如何获取由find启动的命令的退出代码?

Related 相关文章

  1. 1

    捕获退出命令的退出代码

  2. 2

    如何在Makefile中捕获命令退出代码以供以后使用?

  3. 3

    如何在shell命令或单行脚本上生成所需的退出代码?

  4. 4

    如何使“本地”捕获退出代码?

  5. 5

    SSH捕获远程ssh命令的退出代码

  6. 6

    捕获退出代码和命令输出

  7. 7

    如何在if语句中检查命令退出代码

  8. 8

    如何提取命令的退出代码?

  9. 9

    如何在自定义Django命令上返回非零退出代码,同时能够对其进行测试?

  10. 10

    如何在使用开放源代码配方构建的HUB上安装Rappture Java绑定?

  11. 11

    bash-从远程ssh命令捕获退出代码

  12. 12

    我们如何在python中运行bash脚本时捕获bash脚本的退出代码

  13. 13

    Bash:如何在使用微调器时获取命令的退出代码?

  14. 14

    如何在Symfony2命令中设置退出状态代码?

  15. 15

    使用条件执行时,如何在Windows上访问退出代码先前命令?

  16. 16

    如何在位图(Winforms)上绘制清晰的文本?

  17. 17

    如何在位图图像上绘制对数轴

  18. 18

    如何捕获管道中非最终命令的退出状态?

  19. 19

    命令|| 运行代码并退出

  20. 20

    捕获Expect脚本的退出代码

  21. 21

    如何在Shell脚本中捕获退出1信号?

  22. 22

    Bash陷阱命令未能捕获致命的PHP脚本退出代码255

  23. 23

    如何在Windows上退出Nodemon

  24. 24

    如何在Windows上退出Nodemon

  25. 25

    如何在退出帧上获取MessageDialog?

  26. 26

    如何从失败的命令返回退出代码0

  27. 27

    如何解决错误:“命令以代码1退出”?

  28. 28

    如何运行命令并以更少的字符获取退出代码?

  29. 29

    如何获取由find启动的命令的退出代码?

热门标签

归档