Detectar se o comando foi impresso para stderr

2

Eu tenho este programa em C

#include <stdio.h>

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

    return 0;
}

Se eu executar este script

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

Ele produzirá

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!

Isso porque o gcc não considerou esse erro, mas ainda produziu esses avisos em stderr .

Mas ainda quero detectar isso no script bash.

    
por gabriel80546 13.04.2018 / 21:24

2 respostas

2

Acho que a resposta do @ DavidPostill é a correta, mas se quiser manter a distinção entre avisos e erros, bem como detectar notas, você pode adicionar 2>err ao final do comando gcc :

gcc -O3 -o hello hello.c

Depois faça seu teste:

if [ $? -eq 0 -a ! -s err ]
    
por 13.04.2018 / 22:23
4

gcc não considerou isso como um erro

Você pode usar a opção -Werror .

-Werror Make all warnings into errors.

Fonte Opções de Aviso - Usando a Coleção de Compiladores GNU (GCC)

    
por 13.04.2018 / 21:31

Tags