在Bash脚本中处理gcc警告和输出

所以我是整个Bash脚本场景的新手,但我正在编写一个脚本来编译目录中的所有.c文件,我已成功通过以下方式完成:

for F in *.c; do gcc -c -Wall -o ${F%.c} $F done 

一切正常,但我希望输出看起来像:

 ex1.c Errors ex2.c OK ex3.c Warnings 

所以基本上我希望退出状态为0(一切正常)为“Ok”,状态1(警告,但没有错误)为“警告”和状态2(未编译)为“错误”。

我很难搞清楚如何做这样的事情。 我四处搜寻,找不到任何我发现有用的东西。 我很可能忽略了一些东西。

编辑:无论如何要说:如果gcc -Wall file.c有错误,那么只说错误而不是完整的GCCerror handling消息? 与警告和完美的编译相同?

gcc也会返回0退出代码以获取警告。 所以你要用这样的东西来区分自己:

  for F in *.c; do out=$(gcc -c -Wall -o ${F%.c} $F 2>&1) if [ $? -ne 0 ]; then echo $F Errors else if grep "warning:" <<<"${out}" >/dev/null ; then echo $F Warnings else echo $F OK fi fi done 

杰弗里

要构建项目,您需要一个呈现DAG的构建工具。 make是经典的例子,SCons是一个现代工具。

为了解决您的bash问题,以下内容将报告非零退出状态:

 for F in *.c; do gcc -c -Wall -o ${F%.c} $F && [[ `echo $?` ]] || echo "Error" done 

&&|| 代币是和和或。 [[ echo $? ]]测试gcc调用后的退出状态。 如果为零然后安静,否则回声错误。

我正在解决你的具体问题,所以也许这很有用。 但是一般来说,在bash for循环中编译.c文件并不是一种好习惯。