我创建了一个简单的 c 程序,并故意省略了 ';' 以导致错误。我想使用 grep 命令来知道编译是否成功。
我用:
gcc test.c | grep 'error'
但输出似乎不正确。这是正确的方法吗?
我认为它不起作用,因为这样做:
回声"hello world" | grep "hello"
我得到了匹配的彩色文本。
当执行 grep 进行编译时,没有这样的事情。
错误形式如下:
test.c: In function ‘main’:
test.c:8:2: error: expected ‘,’ or ‘;’ before ‘return’
return 0;
^
我使用的程序是:
int main(int argc, char const *argv[]){
char f[] = "Hello thereeee!"
return 0;
}
答案1
如果你想知道一个命令是成功还是失败,通常必须检查其退出代码。零表示成功,非零表示失败。
shell 中的示例:
gcc foo.c
rc=$? # Store exit code for later use
if [ $rc -ne 0 ]; then # $rc not equal to zero
echo "gcc exited with $rc"
fi
您还可以分别使用&&
或||
来在成功或失败时执行命令:
gcc foo.c && echo gcc succeeded
gcc foo.c || echo gcc failed
正如评论中提到的,gcc foo.c | grep error
没有捕获所有内容,因为管道通常仅捕获标准输出 (stdout)。程序通常会将异常消息输出到标准错误 (stderr)。要捕获该流,您必须在管道传输到之前将 stderr 重定向到 stdout grep
:
gcc foo.c 2>&1 | grep error
或者,如果您使用bash
shell,您可以使用这个简写:
gcc foo.c |& grep error
现在,这gcc
将生成一个a.out
二进制文件。如果您只想检查语法错误,可以使用gcc -fsyntax-only foo.c
。然后,您可以检查输出或检查其退出代码是否存在错误。
答案2
您应该 grepping stderr:
gcc ... |& grep.
– 穆鲁