[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