[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