
Я работаю со скриптом, который не могу изменить и который не использует коды выхода (все выходы — это просто «exit»).
Не изменяя сценарий (или не крича на идиотов, которые его написали), есть ли способ проверить, «дошел ли сценарий до конца», а не завершать его в какой-то более ранней точке сценария?
Единственное, что приходит мне в голову, — это как-то отслеживать активные процессы до их завершения, но при этом отслеживание также должно завершиться, если процесс завершится из-за ошибки.
решение1
Я работаю со скриптом, который не могу изменить и который не использует коды выхода.
Если произошла ошибка, последняя строка в этом файле должна содержать «exit», в противном случае выполнение скрипта будет успешно завершено.
Этот код приведет к завершению команды с кодом 1 в случае сбоя и с кодом 0 в случае успеха:
bash -x scriptname 2>&1 | tail -n1 | grep -vq exit
tail -n1
отображает только последнюю строку и grep -vq exit
проверяет, содержит ли она слово exit
.
Примеры того, как сделать так, чтобы это отображало полезные сообщения:
bash -x scriptname 2>&1 | tail -n1 | grep -vq exit && echo Success
Или:
bash -x scriptname 2>&1 | tail -n1 | grep -vq exit || echo Fail