我想在配置过程中运行一个shell命令 - 如果此操作的返回值为0,我想使用它。否则,我想退出并显示错误消息。
我写了这样的话:
LOC=$(perl -MExtUtils::Embed -e perl_inc | sed 's/[ \t]*-I//')
RC=$?
AS_IF([ test $RC != 0 ], [AC_MSG_ERROR([Can't find module MExtUtils::Embed in perl. Try installing perl 5.8.8 or above])],)
这不起作用。即使命令失败,RC也总是得到值0。
有谁知道该怎么做?
谢谢
答案 0 :(得分:2)
问题是你的管道总是成功,因为无论perl做什么,sed
都会成功。一种方法是简单地延迟调用sed
:
LOC=$( perl -MExtUtils::Embed -e perl_inc )
AS_IF([ test $? != 0 ], [AC_MSG_ERROR([...])])
LOC=$( echo "$LOC" | sed 's/[ \t]*-I//' )
另一方面,看起来perl_inc
是perl的命令而不是文件的名称,因此将sed中的替换添加到perl中可能更容易。
第三方面,您应该只使用 AX_PROG_PERL_MODULES
来查看是否安装了所需的模块。