コマンドがstderrに出力されたかどうかを検出する

コマンドがstderrに出力されたかどうかを検出する

このプログラムはC言語で書かれています

#include <stdio.h>

int main() {
    char foo[10];
    int i;
    for(i = 0; i < 20 ; i++) {
        foo[i] = 0;
    }

    return 0;
}

このスクリプトを実行すると

#!/bin/bash
gcc -O3 -o hello hello.c
if [ $? -eq 0 ]
then
    echo -e "\033[1;32mcompilation sucess!\033[0m"
else
    echo -e "\033[1;31mcompilation error!\033[0m"
fi

出力されます

hello.c: In function ‘main’:
hello.c:8:10: warning: iteration 10u invokes undefined behavior     [-Waggressive-loop-optimizations]
foo[i] = 0;
    ^
hello.c:6:2: note: containing loop
  for(i = 0; i<20 ;i++)
  ^
compilation sucess!

これは、gcc がそれをエラーと見なさず、それでも警告を出力したためですstderr

しかし、私はまだそれを bash スクリプト内で検出したいと考えています。

スクリーンショット

答え1

@DavidPostill さんの回答は正しいと思いますが、警告とエラーの区別とメモの検出を保持したい場合は、コマンド2>errの最後に以下を追加できますgcc

gcc -O3 -o hello hello.c

次にテストを実行します。

if [ $? -eq 0 -a ! -s err ]

答え2

gccそれを間違いとは考えなかった

スイッチは使えます-Werror

-Werrorすべての警告をエラーにします。

ソース警告オプション - GNU コンパイラ コレクション (GCC) の使用

関連情報