bil*_*pcs 1 command-line compiling grep
我已经创建了一个简单的 c 程序,并省略了一个 ';' 故意得到一个错误。我想使用grep命令来知道编译是否成功。
我用:
gcc test.c | grep 'error'
但输出似乎不对。这是正确的方法吗?
我认为它不起作用,因为这样做:
echo"hello world" | grep "hello"
我得到了匹配的彩色文本。
在为编译做 grep 时,没有这样的事情。
错误具有以下形式:
test.c: In function ‘main’:
test.c:8:2: error: expected ‘,’ or ‘;’ before ‘return’
return 0;
^
Run Code Online (Sandbox Code Playgroud)
我使用的程序是:
int main(int argc, char const *argv[]){
char f[] = "Hello thereeee!"
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果你想知道一个命令是成功还是失败,你通常必须检查它的退出代码。零表示成功,非零表示失败。
外壳示例:
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
Run Code Online (Sandbox Code Playgroud)
您还可以使用&&
或||
分别在成功或失败时执行命令:
gcc foo.c && echo gcc succeeded
gcc foo.c || echo gcc failed
Run Code Online (Sandbox Code Playgroud)
正如评论中提到的,gcc foo.c | grep error
没有捕获所有内容,因为管道通常只捕获标准输出(stdout)。程序通常会向标准错误 (stderr) 输出异常消息。要捕获该流,您必须在管道到之前将 stderr 重定向到 stdout grep
:
gcc foo.c 2>&1 | grep error
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用bash
shell,则可以使用以下简写:
gcc foo.c |& grep error
Run Code Online (Sandbox Code Playgroud)
现在,这会gcc
生成一个a.out
二进制文件。如果您只想检查语法错误,可以使用gcc -fsyntax-only foo.c
. 然后,您可以检查输出或检查其退出代码是否有错误。