From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Message-ID: <443FE885.7090807@altlinux.org> Date: Fri, 14 Apr 2006 22:23:01 +0400 From: Alexey Rusakov User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8) Gecko/20060328 Thunderbird/1.5 Mnenhy/0.7.3.0 MIME-Version: 1.0 To: ALT Devel discussion list References: <20060414154621.GA3423@localhost> In-Reply-To: <20060414154621.GA3423@localhost> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Subject: Re: [devel] /bin/sh errexit semantics X-BeenThere: devel@lists.altlinux.org X-Mailman-Version: 2.1.7 Precedence: list Reply-To: ALT Devel discussion list List-Id: ALT Devel discussion list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 Apr 2006 18:27:48 -0000 Archived-At: List-Archive: List-Post: Alexey Tourbin wrote: > $ 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), поведение было бы именно таким Ну, в манах по этому поводу сказано, что если команда является частью проверки условия, или её результат отрицается через !, или команда является частью выражения с || или &&, то семантика errexit не поддерживается. Я могу только посоветовать ставить хвосты "|| return $?" везде в функции, где может быть неудачное выполнение команды. -- Alexey "Ktirf" Rusakov