Определить, вывела ли команда на 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)

Связанный контент