0

我想在配置过程中运行一个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,即使命令失败。

有谁知道怎么做?

谢谢

4

1 回答 1

2

问题是你的管道总是成功的,因为sed无论 perl 做什么都会成功。一种方法是简单地延迟调用sed

LOC=$( perl -MExtUtils::Embed -e perl_inc )
AS_IF([ test $? != 0 ], [AC_MSG_ERROR([...])])
LOC=$( echo "$LOC" | sed 's/[ \t]*-I//' )

另一方面,它看起来像是perl_incperl 的命令而不是文件的名称,因此简单地将 sed 的替换添加到您的 perl 中可能会更容易。

另一方面,您可能应该只使用来查看是否安装了所需的模块。 AX_PROG_PERL_MODULES

于 2013-01-17T20:48:25.950 回答