Проверьте, завершилось ли выполнение скрипта, а не завершилось ли оно

Проверьте, завершилось ли выполнение скрипта, а не завершилось ли оно

Я работаю со скриптом, который не могу изменить и который не использует коды выхода (все выходы — это просто «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

Связанный контент