как проверить возвращаемое значение оболочки cmd в настройке автоинструментов

Я хотел бы запустить команду оболочки во время процесса настройки - если возвращаемое значение этой операции равно 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, даже если команда завершается ошибкой.

Кто-нибудь знает, как это сделать правильно?

Спасибо


person Omer Dagan    schedule 17.01.2013    source источник


Ответы (1)


Проблема в том, что ваш канал всегда завершается успешно, потому что 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_inc - это команды для perl, а не имя файла, поэтому может быть проще просто добавить замену из sed в ваш perl.

С третьей стороны, вам, вероятно, следует просто использовать AX_PROG_PERL_MODULES, чтобы проверить, нужный модуль установлен.

person William Pursell    schedule 17.01.2013