2011-08-11 2 views
2

makeがstderrに書き込むときにmakeを実行して中止するbashスクリプトがあります。エラーを作る: "ar:creating ../lib/libmgr.a"

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

しかし、作るファイルに次を書き込みます:

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 

これは何を意味するのでしょうか?コードは次のようですかこれらのエラーはありますか?そうでない場合、なぜ彼らは標準エラーに書き込まれますか?

答えて

0

エラーのようには見えません。メッセージはarのようです。 stdエラーファイルがゼロ以外の場合、なぜ停止するのですか?あなたも警告を止めたいですか?そうでない場合は、makeコマンドの状態に基づいて停止することができます(makeコマンドがエラーを示した後、ゼロ以外の$?値)。

+0

「ERR = $(cat $ {ERROR_FILE})」が狂っていることを上記に追加します。あなたが望むのは、ファイルに内容があるかどうかを確認することです。これはtestでうまくいきます: 'if [! -s "$ {ERROR_FILE}"];エコー終了、サイズ0のファイル。 fi' – Sorpigal

+0

このプロジェクトでは警告が表示されないので、警告でも中止する必要があります。ご協力いただきありがとうございます。すべてが "ar:"で始まるなら、今は中止していない。あなたがポイントを持っている@Sorpigalが、私は変数$ ERRを使用します。 –

0

私は@skjaidevに同意します。さらに、ERR変数で探しているものをより具体的にすることもできます。一つのアプローチは、

編集です:私はこのことができます願ってい

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 

を作るために、ARからの参照を変更しました。

+0

私はそれの多くを理解していませんが、あなたに(間違って)私がarを呼んでいると仮定しているように見えます。それはmakeがするものです。 –

+0

訂正していただきありがとうございます。あなたは 'case ... esac'構造を理解していないと言っていますか?あなたが '$ {ERR} 'で' error'、 'ERROR' 'Error'、 'ERror'などとマッチするシェル正規表現です。 } '変数。 – shellter

4

ar-cフラグを付けると、アーカイブの作成時にデフォルトで標準エラーに書き込まれる診断メッセージを抑制できます。例:

$ ar -cruv libfoo.a foo.o bar.o baz.o 
関連する問題