[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Revisiting Error handling (errexit)
From: |
Yair Lenga |
Subject: |
Re: Revisiting Error handling (errexit) |
Date: |
Wed, 6 Jul 2022 00:18:14 +0300 |
Hi Martin,
Thanks for taking the time to review my proposal.
Wanted to highlight that the implementation was less than 3 hour (fun) job - no
trouble at all. Credit should go to current bash dev team (I am being told it’s
a team of 1) - for keeping organized, well written, documented code !
I’m not in front of my desktop, so I can not verify behavior, but here is my
expectation - let me know if it make sense, in the context of the project goal
- every unhandled failed statement should unwind execution up, until explicitly
handled. “Up” means current semi-colon connected statement - in a group, sub
shell or a list.
> if false ; echo Foo ; [[ notempty ]] ; then echo Full ; else echo Empty ; fi
> || echo Fail
>
Output: Empty
If false … should fail on the first false, going to the else part, printing
Empty. Since the ‘echo empty’ succeeded, Fail will not be printed.
> or
>
> if { false ; echo Foo ; [[ notempty ]] ; } ; then echo Full ; else echo Empty
> ; fi || echo Fail
>
Output: Empty
Same as above. Grouping does not change behavior.
> or
>
> if ( false ; echo Foo ; [[ notempty ]] ) ; then echo Full ; else echo Empty ;
> fi || echo Fail
>
Output: empty
Same as above. Running in a subshell does not change behavior.
> or
>
> for x in a b ; do if false ; echo Foo ; [[ notempty ]] ; then echo Bar ; else
> echo Empty ; fi ; done
Output: Empty (for a), Empty (for b)
Since the if statement succeed, the code will flow to from the first iteration
to the second iteration.
The last case has interesting variant: the case when the loop body fail (for x
in a b ; do echo $x ; false ; done.
Output: a
In this case, the code failed body will result in effective ‘break’ to the
loop, where the whole for statement will fail. I believe this case is not
currently covered in the implementation (2 or 3 lines to cover each of the loop
constructs: for (list, arithmetic), until and while.
Thank you for proposing those test cases. I will add a small verification
script with all those cases to my submission - I need to prepare the patch
against the dev branch.
Regards,
Yair.
Sent from my iPad
> On Jul 5, 2022, at 7:27 PM, Martin D Kealey <martin@kurahaupo.gen.nz> wrote:
>
>
> Before going to the trouble of implementing this, I think it's worth having a
> discussion about the precise semantics.
>
> The examples given suggest that if a command has an un-tested non-zero exit
> status, that it will cause the current function to return that status
> immediately.
>
> But what about other compound statements?
>
> What do you propose should be the output (if any) from:
>
> In short, how far does unwinding this propagate, and what stops it?
>
> -Martin
- Re: Revisiting Error handling (errexit), (continued)
Re: Revisiting Error handling (errexit), Martin D Kealey, 2022/07/08
Re: Revisiting Error handling (errexit), Martin D Kealey, 2022/07/12
Re: Revisiting Error handling (errexit),
Yair Lenga <=
- Re: Revisiting Error handling (errexit), Lawrence Velázquez, 2022/07/05
- Re: Revisiting Error handling (errexit), Yair Lenga, 2022/07/05
- Re: Revisiting Error handling (errexit), Lawrence Velázquez, 2022/07/05
- Re: Revisiting Error handling (errexit), Yair Lenga, 2022/07/05
- Re: Revisiting Error handling (errexit), Lawrence Velázquez, 2022/07/05
- Re: Revisiting Error handling (errexit), Martin D Kealey, 2022/07/06
- Re: Revisiting Error handling (errexit), Yair Lenga, 2022/07/06
- Re: Revisiting Error handling (errexit), Koichi Murase, 2022/07/06
- Re: Revisiting Error handling (errexit), Yair Lenga, 2022/07/06
Re: Revisiting Error handling (errexit), Koichi Murase, 2022/07/06