[devel] /bin/sh errexit semantics

Alexey Tourbin =?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Пт Апр 14 19:46:21 MSD 2006


$ cat test.sh
#!/bin/sh -ef
func()
{
        false
        echo 'after false'
}
func || rc=$?
func
$ sh -efx test.sh
+ func
+ false
+ echo 'after false'
after false
+ func
+ false
$ 

Что здесь происходит: я написал функцию func() и хочу, чтобы она
исполнялась в режиме errexit.  Однако при вызове 'func || что-то'
функция не выполняется в режиме errexit.  Кажется, так ведут себя все
шеллы, а не только bash.

Чего я интуитивно хочу: чтобы при вызове 'func || что-то' функция func
отвалила бы на команде false, т.е. вернула бы статус false, а часть
"after false" выполняться не должна.  Почему я этого интуитивно хочу?
Если бы функция func() была отдельным исполняемым файлом (который
выполняется в режиме errexit), поведение было бы именно таким.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?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/20060414/f28ccbea/attachment-0001.bin>


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