2 votes

Grep pour obtenir une erreur de compilation

J'ai créé un programme c simple et j'ai laissé délibérément un ';' pour obtenir une erreur. Je veux savoir avec la commande grep si la compilation a réussi ou non.

J'utilise :

gcc test.c | grep 'error' mais la sortie ne semble pas correcte. Est-ce la bonne méthode ?

Je suppose que cela ne fonctionne pas parce que en faisant :

echo "hello world" | grep "hello" j'obtiens un texte coloré pour la correspondance.

Lorsque vous utilisez grep pour la compilation, il n'y a pas une telle chose.

L'erreur a cette forme :

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

et le programme que j'utilise est :

int main(int argc, char const *argv[]){
    char f[] = "Hello thereeee!" 
    return 0;
}

7voto

Lekensteyn Points 162346

Si vous souhaitez savoir si une commande a réussi ou échoué, vous devez généralement vérifier son code de sortie. Zéro indique le succès, non zéro indique l'échec.

Exemple en shell:

gcc foo.c
rc=$?  # Stockez le code de sortie pour une utilisation ultérieure
if [ $rc -ne 0 ]; then  # $rc n'est pas égal à zéro
    echo "gcc a quitté avec $rc"
fi

Vous pouvez également utiliser && ou || pour exécuter une commande en cas de succès ou d'échec, respectivement:

gcc foo.c && echo gcc a réussi
gcc foo.c || echo gcc a échoué

Comme mentionné dans les commentaires, gcc foo.c | grep error n'a pas tout capté car un tuyau capture normalement seulement la sortie standard (stdout). Les programmes émettront souvent des messages exceptionnels sur la sortie d'erreur standard (stderr). Pour capturer ce flux, vous devez rediriger stderr vers stdout avant de le transmettre à grep:

gcc foo.c 2>&1 | grep error

Ou, si vous utilisez le shell bash, vous pouvez utiliser ce raccourci:

gcc foo.c |& grep error

Maintenant, ce gcc génère un binaire a.out. Si vous souhaitez simplement vérifier les erreurs de syntaxe, vous pouvez utiliser gcc -fsyntax-only foo.c. Vous pouvez ensuite examiner la sortie ou vérifier son code de sortie pour les erreurs.

2voto

Tim Points 30349

Résolu par muru dans les commentaires:

Vous devriez rechercher dans stderr:

gcc ... |& grep.

– muru

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X