Erkennen, ob der Befehl auf stderr ausgegeben wurde

Erkennen, ob der Befehl auf stderr ausgegeben wurde

Ich habe dieses Programm in C

#include <stdio.h>

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

    return 0;
}

Wenn ich dieses Skript ausführe

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

Es wird ausgegeben

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!

Das liegt daran, dass gcc dies nicht als Fehler betrachtete, aber trotzdem diese Warnungen ausgab stderr.

Aber ich möchte das trotzdem im Bash-Skript erkennen.

Bildschirmfoto

Antwort1

Ich denke, die Antwort von @DavidPostill ist die richtige, aber wenn Sie die Unterscheidung zwischen Warnungen und Fehlern sowie die Erkennung von Hinweisen beibehalten möchten, können Sie 2>erram Ende des gccBefehls Folgendes hinzufügen:

gcc -O3 -o hello hello.c

Dann machen Sie Ihren Test:

if [ $? -eq 0 -a ! -s err ]

Antwort2

gcchabe das nicht als Fehler angesehen

Sie können den Schalter verwenden -Werror.

-WerrorMachen Sie alle Warnungen zu Fehlern.

QuelleWarnoptionen – Verwenden der GNU Compiler Collection (GCC)

verwandte Informationen