2 votos

Detectar si el comando ha stderr

Tengo este programa en C

#include <stdio.h>

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

    return 0;
}

Si puedo ejecutar esta secuencia de comandos

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

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!

Eso es porque gcc no se considera que un error, pero todavía la salida de los avisos en stderr.

Pero todavía me quiere detectar que dentro de la secuencia de comandos bash.

screenshot

4voto

DavidPostill Puntos 30286

gcc no lo considera como un error

Usted puede utilizar el -Werror del interruptor.

-Werror Hacer todas las advertencias de los errores.

Fuente de Advertencia de Opciones - GNU Compiler Collection (GCC)

2voto

AFH Puntos 3747

Creo que @DavidPostill la respuesta es la correcta, pero si desea mantener la distinción entre los errores y advertencias, así como la detección de notas, usted puede agregar 2>err hasta el final de la gcc comando:

gcc -O3 -o hello hello.c

A continuación, hacer la prueba:

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

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: