[devel] /bin/sh errexit semantics

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Сб Апр 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$$.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/devel/attachments/20060415/a3d7a7ed/attachment-0001.bin>


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