我有一个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?
答案 0 :(得分:4)
您可以将-c
标志与ar
一起使用,以禁止在创建存档时默认写入标准错误的诊断消息。例如:
$ ar -cruv libfoo.a foo.o bar.o baz.o
答案 1 :(得分:0)
它们看起来不像错误,它们看起来像来自ar的消息。如果std err文件非零,为什么要停止?你想停止警告吗?如果没有,您可能希望根据make命令的状态停止(make命令指示错误后的非零$?值)。
答案 2 :(得分:0)
我同意@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
我希望这会有所帮助。