grep для получения ошибки компиляции

Я создал простую c программу и бросил a''; нарочно получить ошибку. Я хочу использовать команду 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;
}
0
задан 26 November 2014 в 13:00

2 ответа

Если требуется знать, успешно выполнилась ли команда или перестала работать, обычно необходимо проверять ее код выхода. Zero указывает на успех, ненулевой выставочный отказ.

Пример в оболочке:

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 оболочка, можно использовать эту стенографию:

gcc foo.c |& grep error

Теперь, это gcc генерирует a.out двоичный файл. Если Вы просто хотите проверить на синтаксические ошибки, можно использовать gcc -fsyntax-only foo.c. Можно тогда исследовать в выводе или проверить его код выхода на наличие ошибок.

4
ответ дан 6 October 2019 в 09:20

Решенный muru в комментариях:

необходимо захватывать stderr:

gcc ... |& grep.

†“muru

1
ответ дан 6 October 2019 в 09:20

Другие вопросы по тегам:

Похожие вопросы: