Détecter si la commande a été imprimée sur stderr

2

J'ai ce programme en C

#include <stdio.h>

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

    return 0;
}

Si je lance ce script

#!/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

Il va sortir

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!

C’est parce que gcc n’a pas considéré cette erreur comme une erreur, mais a quand même émis ces avertissements stderr.

Mais je veux toujours détecter cela dans le script bash.

capture d'écran

gabriel80546
la source
Bienvenue sur Super User. Si votre question concerne la programmation / le codage, merci de poster dans Stack Overflow.
Arun Vinoth
2
@ArunVinoth La question est toujours d'actualité, car elle concerne l'utilisation d'un outil de programmation et son interaction avec le script d'appel.
DavidPostill
@ KamilMaciorowski Pas vraiment, car une réponse à la question posée dans le titre résoudrait également la question des PO (même si ce ne serait pas la meilleure réponse).
DavidPostill
je veux toujours savoir comment détecter si la commande a été imprimée sur stderr, ce serait beaucoup mieux que l'awnser accepté
gabriel80546
Je pense que la réponse de @ DavidPostill est la bonne, mais si vous souhaitez conserver la distinction entre les avertissements et les erreurs, ainsi que la détection des notes, vous pouvez ajouter `2> err` à la fin de la gcccommande et effectuer votre test if [ $? -eq 0 -a ! -s err ].
AFH

Réponses:

2

Je pense que la réponse de @ DavidPostill est la bonne, mais si vous souhaitez conserver la distinction entre les avertissements et les erreurs, ainsi que la détection des notes, vous pouvez ajouter 2>errà la fin de la gcccommande:

gcc -O3 -o hello hello.c

Alors faites votre test:

if [ $? -eq 0 -a ! -s err ]
AFH
la source
Eh bien, votre réponse est ce que je veux vraiment et c'est très utile, ouais vous avez raison de dire que j'ai posé ma question, il semble que je veuille vraiment faire cette détection dans ce cas, mais une détection dans tous les cas c'est beaucoup mieux.
gabriel80546
depuis ce code j'ai créé juste pour illustrer le problème. ce n'est en réalité pas un vrai code qui fait des 'choses vraiment utiles'
gabriel80546
4

gcc n'a pas considéré cela comme une erreur

Vous pouvez utiliser le -Werrorcommutateur.

-Werror Faites de tous les avertissements des erreurs.

Options d'avertissement source - Utilisation de la collection de compilateurs GNU (GCC)

DavidPostill
la source
Bien que ce soit juste un truc que je pourrais utiliser avec cette commande gcc, mais ce que je veux vraiment, c’est quelque chose qui m’aiderait avec n’importe quelle commande.
gabriel80546
@ gabriel80546 Ensuite, vous avez posé cette question dans votre question. Mais vous ne devriez pas changer votre question maintenant car cela invaliderait les réponses existantes.
DavidPostill
1
Je pensais que le titre était clair
gabriel80546