[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Error handling question
From: |
Chet Ramey |
Subject: |
Re: Error handling question |
Date: |
Mon, 09 Nov 2009 10:27:03 -0500 |
User-agent: |
Thunderbird 2.0.0.23 (Macintosh/20090812) |
Ciprian Dorin, Craciun wrote:
>> Sorry, but I don't understand at all... So please bare with me and
>> make me understand.
>>
>> So I've interpreted `set -e` as a way to tell bash to treat any
>> process exiting with non-zero (and not succeeded by a || ), as an
>> error and end the current shell / sub-shell.
>>
>> Thus if I say: `set -e ; { false ; true ; }` it works, but when I
>> put the `||`, it doesn't...
>>
>> So my question is how can I solve this problem? (And obtain the
>> needed behaviour.) (I see `()` and `{}` as blocks in normal
>> programming languages (of course with some particularities), and
>> non-zero exit codes as exceptions. And this is very helpful to write
>> robust bash scripts.)
>>
>> Thanks,
>> Ciprian.
>
> I'm also pasting from the documentation.
>
> The interesting part is :`The shell does not exit if the command
> that fails is part of the command list immediately following [...]
> part of any command executed in a && or |⎪ list, [...], The
> option applies to [...] each sub-shell environment [...] and may cause
> subshells to exit before executing all the commands in the subshell`.
>
> So from this I understand that the (parent) shell doesn't exit if
> the (child) sub-shell fails and is at left of `||`. But that the
> subshell inherits the `-e` option, and should exit.
The subshell does inherit the -e option. However, it also inherits the
knowledge that it's the lhs of ||, which cancels the effect of set -e.
The setting is ignored and enabling it has no effect. (This is actually
historical sh behavior that the Posix working group attempted to codify
last spring.)
Chet
--
``The lyf so short, the craft so long to lerne.'' - Chaucer
``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, ITS, CWRU chet@case.edu http://cnswww.cns.cwru.edu/~chet/
- Error handling question, Ciprian Dorin, Craciun, 2009/11/08
- Re: Error handling question, Chet Ramey, 2009/11/08
- Message not available
- Re: Error handling question, Jan Schampera, 2009/11/09
- Re: Error handling question, Ciprian Dorin, Craciun, 2009/11/09
- Re: Error handling question, Greg Wooledge, 2009/11/09
- Re: Error handling question, Ciprian Dorin, Craciun, 2009/11/09
- Re: Error handling question, Greg Wooledge, 2009/11/09
- Re: Error handling question, Sven Mascheck, 2009/11/09
- Re: Error handling question, Chet Ramey, 2009/11/09
- Re: Error handling question, Sven Mascheck, 2009/11/09
- Re: Error handling question, Marc Herbert, 2009/11/09