Не уверен, что это работает в sh, но работает в bash. Из этого я сделал инструмент "попробовать / исключить", но, думаю, он будет работать и здесь.
#! /bin/bash
try() {
exec 2> /dev/null
#direct stderr out to /dev/null
#main block
input_function="$1"
#fallback code
catch_function="$3"
#open a sub shell
(
#tell it to exit upon encountering an error
set -e
#main block
"$@"
)
#if exit code of above is > 0, then run fallback code
if [ "$?" != 0 ]; then
$catch_function
else
#success, it ran with no errors
test
fi
#put stderr back into stdout
exec 2> /dev/tty
}
Примером использования этого будет:
try [function 1] except [function 2]
Функция 1 будет основной блок кода, и 2 будет резервной функцией / блоком кода. Ваша первая функция может быть:
run() {
/path/to/external/script
}
А вторая может быть тем, к чему вы хотите прибегнуть. Надеюсь, это поможет.