如何为autoconf项目分配动态的基于git的版本号?Autoconf需要一个静态字符串参数
AC_INIT([Title],[version],[name])
Run Code Online (Sandbox Code Playgroud)
AC_INIT文档说可以使用M4提供基于shell的版本.M4超出了我的范围.我想根据此命令的结果对我的软件进行版本控制
version=`git describe --abbrev=7 --dirty --always --tags`
Run Code Online (Sandbox Code Playgroud)
这会产生类似的东西4.6.6-alpha07-9-ga3e01a8.
我可能不理解高级答案.我需要一个解决方案,例如"将其剪切并粘贴到您的autoconf.ac和/或acinclude.m4".
任何帮助赞赏.
编辑这篇文章,原文位于"谢谢!"的底部.
command='a.out arg1 arg2 &'
eval ${command}
if [ $? -ne 0 ]; then
printf "Command \'${command}\' failed\n"
exit 1
fi
wait
Run Code Online (Sandbox Code Playgroud)
这是一个演示问题的测试脚本,我在原帖中过于简化了.注意第2行中的&符号和wait命令.这些更忠实地代表了我的剧本.在重要的情况下,&符有时在那里,有时不在,它的存在是由用户指定的标志确定的,该标志指示是否进行长算术计算.并且,如果它很重要,我实际上是在背景许多(十二个)过程,即${command[0..11]}.如果有任何失败,我希望脚本死掉.我使用'wait'来同步所有进程的成功返回.快乐(有点)使用另一种方法,但这几乎可行.
&符号(用于背景)似乎导致了问题.当${command}省略符号,脚本运行预期:可执行的a.out是找不到的,投诉到该效果被发出,并且$?非零,因此主机脚本退出.如果${command}包含&符号,则会发出相同的投诉,但是$?为零,因此脚本继续执行.我希望脚本在a.out失败时立即死亡但是如何从后台进程获得非零返回值?
谢谢!
(原帖):
我有一个使用表单命令的bash脚本
eval ${command}
if [ $? -ne 0 ]; then
printf "Command ${command} failed"
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
其中$ {command}是一串单词,例如"a.out arg1 ... argn".问题是$?即使${command}失败,来自eval(即)的返回码始终为零.从上面的代码段中删除"eval"允许返回正确的返回代码($?),从而停止脚本.我需要将我的命令字符串保存在变量(${command})中以便在其他地方操作它,并且只是在${command}没有eval的情况下运行
不能很好地用于其他原因.使用eval时如何捕获正确的返回码?
谢谢!查理