从bash包装器检测gcc警告

从bash包装器检测gcc警告,bash,unix,gcc,Bash,Unix,Gcc,编写一个bash脚本,告诉我gcc是否有错误或警告 我有这个密码 #!/bin/bash # execute gcc command gcc "$2".c -Wall -g -o "$2"> "$1" 2>&1 # grab exit status of gcc ret=$? # write appropriate message as per return status value ((ret == 0)) && echo "compile V" ||

编写一个bash脚本,告诉我gcc是否有错误或警告 我有这个密码

#!/bin/bash

# execute gcc command
gcc "$2".c -Wall -g -o "$2"> "$1" 2>&1

# grab exit status of gcc
ret=$?

# write appropriate message as per return status value
((ret == 0)) && echo "compile V" || echo "compile X"

# return the exit status of gcc
exit $ret
问题是当它收到警告时,它仍然返回0,因此我得到了Compile V 但是没有任何运气。。数字6 21 118是随机的,其余的是常量

编辑
我不能使用-Werror,因为它用于学校,我必须获得与他们想要的相同的输出…

如果您想查看重定向gcc输出到的文件是否为空,这将告诉您是否写入了任何警告:

gcc "$2".c -Wall -g -o "$2" >"$1" 2>&1; rc=$?
if (( rc > 0 )) || [ -s "$1" ]; then
  echo "compile X"
else
  echo "compile V"
fi

这是因为
test-s
检查一个文件是否存在并且是否为非空文件——这样您就知道,如果将输出重定向到的文件为非空文件,则至少有一个错误或失败。

使用gcc-Werror选项将所有警告视为错误。

gcc
中,添加开关
-Werror
,使警告变成错误
:)
。但是文件的输出会改变吗?我上学需要它……但既然你要修复所有生成警告的代码,那没什么大不了的。
;)。使用
-Werror
您的警告将被视为错误。这意味着您的文件将把它们作为错误(而不是警告)出现。是否希望能够分别识别文件中的警告?如果。。这只是为了训练bash脚本,所以我必须得到相同的输出,也许它不会改变输出?gcc还可以发出非错误/警告的注释,并且它会使文件非空(从而导致错误的输出)。@gniourfgniourf,oops——在以前的版本中,我还没有注意到输出将进入一个文件,并且正在捕获它。并没有完全删除它。@BlueMoon,没错。这里的目标(根据注释)是匹配另一个未给出的测试程序的行为。我相当怀疑它可能也有同样的缺点。如果不是这样,那么我们需要运行一个特定于警告的
grep-q