On Sat, Apr 15, 2006 at 12:13:53AM +0400, Alexey Rusakov wrote: > > Получается, что в errexit mode невозможно сделать wrapper для функции, > > который проверяет код возврата этой функции. Неконсистентно. Напр. в > > скрипте cmdcache используется такая конструкция: > > > > rc=0 > > "$@" >out$$ || rc=$? > > if [ $rc -eq 0 ]; then > > сохранить в кеш out$$ > > else > > удалить out$$ > > return $rc > > fi > > > > Поскольку errexit в таком случае не работает, "$@" скорее всего вернёт 0. > > Если же убрать '|| rc=$?', то невозможно будет удалить out$$ в случае > > ненулевого возврата. > > > А так? > > "$@" >out$$ && : > rc=$? Вроде то же самое. Я же хочу чтобы "$@" отвалил как будто в режиме errexit, но не совсем отвалил, а вернул статус отвалившей команды. #!/bin/sh -ef func() { false echo 'after false' } func && : func + false + echo 'after false' after false + : + func + false Кажется, лучшее в некотром смысле, что здесь можно сделать, это отвалить совсем (то есть "честный" errexit) и оставить out$$.