I have a parent function and child function:
JavaScript
x
parent() {
child aa1 bb1 cc1
child aa2 bb2 cc2
child aa3 bb3 cc3
child aa4 bb4 cc4
}
child() {
.
if [ some error reason ]; then return 1; fi
}
How to make the return 1
(of the child) cause a return in the parent and then avoid the execute the remaining child calls?
without adding a check of the returned value after each child call like this
JavaScript
parent() {
child aa1 bb1 cc1
e=$?; [ "$e" != "0" ] && return $e
child aa2 bb2 cc2
e=$?; [ "$e" != "0" ] && return $e
child aa3 bb3 cc3
e=$?; [ "$e" != "0" ] && return $e
child aa4 bb4 cc4
e=$?; [ "$e" != "0" ] && return $e
}
Advertisement
Answer
There is a solution other than set -e
and || return
It’s simple, just use exit
instead of return
and the parent should called in a sub-shell:
JavaScript
parent() {
child aa1 bb1 cc1
child aa2 bb2 cc2
child aa3 bb3 cc3
child aa4 bb4 cc4
}
child() {
.
if [ some error reason ]; then exit 1; fi
}
And I call the parent in this way:
JavaScript
( parent )