LINUX.ORG.RU

Как обработать код возврата с set -e

 


0

1

Использую set -e для упрощения обработки ошибок в shell-скрипте. Но в одном месте нужна более сложная обработка. Т.е. я вызываю определённую команду и после этого мне нужно получить код ошибки.

Для иллюстрации покажу следующий пример:

#!/bin/sh

set -e

(exit 2)
rv=$?
echo "rv=$rv"

В данном случае мне нужно продолжить выполнение после того, как subshell вернул ошибку. И обработать конкретное значение этой ошибки.

Понятно, что можно сделать set +e в нужном месте. Но может быть есть какой-то более изящный трюк?

★★★

Ответ на: комментарий от ABW

Я привёл ссылку, каждый пример из которой нужно разобрать, чтобы понять, где ″set -e″ сработает, а где нет. ТС, похоже, этого делать не стал. Я не вижу особой разницы между вашим кодом и таким:

if ( exit 2 ) ; then rv=0; else rv=$?; fi
echo $rv

А то, что ″set -e″+″set -o pipefail″ ведёт к «рандомизации» выполнения ″command | head -n1″ нужно бы в man записать...

mky ★★★★★
()
Ответ на: комментарий от mky

Я не вижу особой разницы

Да и я не вижу, кроме количества символов.
А вообще-то я сам никогда этим не пользуюсь и считаю скорее вредным и развращающим молодые неокрепшие умы.
Вон ТС пишет:

думаю, что это меньшее зло, чем писать || exit после каждой команды.

но ведь подобный стиль демонстрирует только то, что он начинает писать раньше, чем подумает о том, что ему на самом деле нужно.

ABW ★★★★★
()