명령이 stderr에 인쇄되었는지 감지

명령이 stderr에 인쇄되었는지 감지

이 프로그램이 C에 있어요

#include <stdio.h>

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

    return 0;
}

이 스크립트를 실행하면

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

출력됩니다

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!

이는 gcc가 이를 오류로 간주하지 않았지만 여전히 stderr.

하지만 나는 여전히 bash 스크립트 내에서 이를 감지하고 싶습니다.

스크린샷

답변1

@DavidPostill의 답변이 정답이라고 생각하지만 경고와 오류의 구별을 유지하고 메모를 감지하려면 명령 2>err끝에 다음을 추가할 수 있습니다 gcc.

gcc -O3 -o hello hello.c

그런 다음 테스트해 보세요.

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

답변2

gcc그걸 오류로 생각하지 않았어

스위치 를 사용할 수 있습니다 -Werror.

-Werror모든 경고를 오류로 만듭니다.

원천경고 옵션 - GNU 컴파일러 컬렉션(GCC) 사용

관련 정보