0

設定プロセス中にシェルコマンドを実行したいのですが、この操作の戻り値が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が何をするかに関係なく成功するため、パイプが常に成功することです。sed1つのアプローチは、 :の呼び出しを単純に遅らせることです。

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

于 2013-01-17T20:48:25.950 に答える