On Wed, Apr 23, 2008 at 07:01:00PM +0400, Alexey Gladkov wrote: > Alexey Tourbin wrote: > >'if' частично отрубает режим -e. > > Тут даже subshell не причём и set -e не поможет. С другой стороны, субшелл отрбуает эффект -e с внешней стороны. То есть можно написать --- sisyphus_check/sisyphus_check- 2008-04-23 14:07:25 +0000 +++ sisyphus_check/sisyphus_check 2008-04-23 15:09:14 +0000 @@ -43,7 +43,8 @@ run_checks() { check_var="$(printf '%s' "no_check_$check" |tr - _)" if eval "[ -z \"\${$check_var-}\" ]"; then - if ! (. "$sisyphus_check_d/$check" && run_check "$f"); then + (. "$sisyphus_check_d/$check" && run_check "$f") + if [ $? -gt 0 ]; then [ -z "$fast_check" ] || return 1 rc=1 fi Тогда всё что в субшелле будет выполняться в чистом -e режиме, но статус субшелла не обрубает саму программу. В общем, вопреки легенде, unix way изначально было не очень хоршо продуман, и нужно им пользоваться острожно. Не злоупотреблять. :)