[devel] /bin/sh errexit semantics

Alexey Tourbin at на altlinux.ru
Сб Апр 15 01:33:45 MSD 2006


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$$.
----------- следущая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : отсутствует
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: отсутствует
Url     : http://lists.altlinux.org/pipermail/devel/attachments/20060415/a3d7a7ed/attachment.bin 


Подробная информация о списке рассылки Devel