Сделайте ошибки: "ar: creation ../lib/libmgr.a" - PullRequest
2 голосов
/ 11 августа 2011

У меня есть скрипт bash, который выполняет make, а затем прерывает, когда make пишет в stderr. Код такой:

make all 2>${ERROR_FILE}
ERR=$(cat ${ERROR_FILE})
if [ ! -z "${ERR}" ];
then
    abort "Halted because of errors in make $1: ${ERR}"
fi

Однако make записывает в файл следующее:

ar: creating ../lib/libmgr.a
ar: creating ../lib/libnet.a
ar: creating ../lib/libeoc.a
ar: creating ../lib/libdvr.a
ar: creating ../lib/libmsg.a
ar: creating ../lib/liblgc.a
ar: creating ../lib/libshm.a
ar: creating ../lib/libsys.a
ar: creating ../lib/librsk.a
ar: creating ../lib/librep.a
ar: creating ../lib/libmdl.a
ar: creating ../lib/libmdb.a
ar: creating ../lib/libdat.a
ar: creating ../lib/libchs.a

Что это значит? Это ошибки? Если нет, то почему они пишутся в stderr?

Ответы [ 3 ]

4 голосов
/ 11 апреля 2012

Вы можете использовать флаг -c с ar для подавления диагностического сообщения, которое по умолчанию записывается в стандартную ошибку при создании архива. Например:

$ ar -cruv libfoo.a foo.o bar.o baz.o
0 голосов
/ 11 августа 2011

Я согласен с @skjaidev.Кроме того, вы также можете более точно указать, что вы ищете в переменной ERR.Один из подходов -

Редактировать: изменил ссылки с ar на

 make ....
 make_rc=$?
 case "${ERR}" in
    *[Ee][Rr][Rr][Oo][Rr]* )
        # real error, modify or duplicate as needed
        echo "real error" >&2
        exit ${make_rc}
    ;;
    *[Ww][Aa][Rr][Nn]* )
        # modify or duplicate as needed for various warning msgs
        echo "real warning $(echo "$ERR" | grep -i warn) >&2
        # exit ?
    ;;
    * )
      # other stuff
    ;;
 esac

Надеюсь, это поможет.

0 голосов
/ 11 августа 2011

Они не похожи на ошибки, они выглядят как сообщения от ar . Почему вы останавливаетесь, если файл std err отличен от нуля? Вы тоже хотите остановиться на предупреждениях? Если нет, вы можете остановиться на основании состояния команды make (ненулевое значение $? После команды make указывает на ошибку).

...