在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文件并不是一种好习惯。