检测命令是否已打印到 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)

相关内容