grep para obter o erro de compilação

0

Eu criei um programa c simples e deixei um ';' de propósito para obter um erro. Eu quero usar o comando grep para saber se a compilação foi bem sucedida ou não.

Eu uso:

gcc test.c | grep 'error' , mas a saída não parece correta. Este é o caminho certo?

Suponho que não funciona porque, ao fazer:

echo "hello world" | grep "hello" Eu recebo um texto colorido para a partida.

Ao fazer grep para compilação, não existe tal coisa.

O erro tem este formulário:

test.c: In function ‘main’:
test.c:8:2: error: expected ‘,’ or ‘;’ before ‘return’
  return 0;
  ^

e o programa que eu uso é:

int main(int argc, char const *argv[]){
    char f[] = "Hello thereeee!" 
    return 0;
}
    
por billpcs 26.11.2014 / 20:45

2 respostas

4

Se você gostaria de saber se um comando foi bem-sucedido ou não, geralmente é necessário verificar seu código de saída. Zero indica sucesso, não-zero mostra falha.

Exemplo no shell:

gcc foo.c
rc=$?  # Store exit code for later use
if [ $rc -ne 0 ]; then  # $rc not equal to zero
    echo "gcc exited with $rc"
fi

Você também pode usar && ou || para executar um comando sobre sucesso ou falha, respectivamente:

gcc foo.c && echo gcc succeeded
gcc foo.c || echo gcc failed

Como mencionado nos comentários, gcc foo.c | grep error não detectou tudo porque um canal normalmente captura apenas a saída padrão (stdout). Os programas geralmente emitem mensagens excepcionais para o erro padrão (stderr). Para capturar esse fluxo, você precisa redirecionar o stderr para stdout antes de canalizar para grep :

gcc foo.c 2>&1 | grep error

Ou, se você usar o bash shell, poderá usar essa abreviação:

gcc foo.c |& grep error

Agora, esse gcc gera um binário a.out . Se você quiser apenas verificar os erros de sintaxe, use gcc -fsyntax-only foo.c . Você pode então examinar na saída ou verificar seu código de saída para erros.

    
por Lekensteyn 26.11.2014 / 22:52
1
por Tim 13.04.2017 / 14:23