我有一个棘手的要求:
我需要使用bash编译100个程序,比如1.c
,2.c
,3.c
... 100.c
,我想保留那些被编译的c程序成功并删除编译错误的c程序。
到目前为止,我只能实现编译这100个程序的目标,但我确实不知道如何检测这100个程序中的编译是否失败。
答案 0 :(得分:7)
只检查返回代码是否为非零,如果文件非零,则删除该文件。运行编译器后,返回代码存储在shell变量$?
中。
以下是这种脚本的长形式。
for i in {1..99};
do
gcc ${i}.c 2> /dev/null > /dev/null
if [[ $? -ne 0 ]]; then
rm ${i}.c
fi
done
作为user268396,中间部分可以缩短为以下内容。
gcc ${i}.c || rm ${i}.c
使用短路运算符||
将确保后一语句仅在前一语句失败时才会运行(即,以非零返回码退出)。
答案 1 :(得分:0)
您可以检查编译器返回的错误代码,它存储在$?
for f in *.c; do
t=${f%.c} # Strip the .c from the source file name
gcc -o $t $f # Try to compile
if [[ "$?" -ne 0 ]]; then
rm $f
fi
done