![Пропустить перехват ошибок в скрипте оболочки](https://rvso.com/image/89179/%D0%9F%D1%80%D0%BE%D0%BF%D1%83%D1%81%D1%82%D0%B8%D1%82%D1%8C%20%D0%BF%D0%B5%D1%80%D0%B5%D1%85%D0%B2%D0%B0%D1%82%20%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA%20%D0%B2%20%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B5%20%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%BA%D0%B8.png)
У меня есть скрипт, который компилирует программу. Эта программа сначала компилирует исходный код с помощью configure && make
команд, затем запускает некоторые тесты с помощью make test
. Этот скрипт также использует set -e
для перехвата ошибок.
Теперь, что я хочу сделать, это сохранить set -e
установку в скрипте и продолжать выполнять скрипт, когда он make test
сталкивается с некоторыми ошибками. Я пытался использовать make -k test
, чтобы заставить тесты запускаться даже при возникновении ошибок, но это перехватывается командой set -e
и останавливается.
Я также знаю, какие тесты не пройдут, так есть ли способ указать скрипту пропустить перехват этих ошибок?
решение1
make test || true
например
#!/bin/sh
set -e
echo hello
make test || true
echo done
Приведет к
hello
make: *** No rule to make target `test'. Stop.
done
В этом случае причиной сбоя было отсутствие правила (отсутствие Makefile :-)), но мы видим, что скрипт продолжает работу.
решение2
set -e
можно перевернуть с помощью set +e
.
#!/bin/sh
set -e
configure && make
set +e
make test
...