Re: eval: Only restore exit status on exit/return

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Nov 29, 2018 at 04:02:32PM +0100, Martijn Dekker wrote:
>
> Isn't it much simpler than that? Upon forking a subshell, traps are reset,
> so it would make sense that any flag that says "we are currently in the
> process of executing a trap" is also reset.
> 
> Which, from a look at the source code, seems to be the -1 value of
> savestatus. So this oneliner fixes it for me:
> 
> diff --git a/src/trap.c b/src/trap.c
> index ab0ecd4..7740955 100644
> --- a/src/trap.c
> +++ b/src/trap.c
> @@ -168,6 +168,7 @@ clear_traps(void)
>  		}
>  	}
>  	trapcnt = 0;
> +	savestatus = -1;
>  	INTON;
>  }

Hmm, I think this breaks the following case which used to work:

	dash -c 'trap "(:; exit) && echo BUG" EXIT; false'

I know this makes no sense but almost every other shell does it
this way.

Thanks,
-- 
Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt



[Index of Archives]     [LARTC]     [Bugtraq]     [Yosemite Forum]     [Photo]

  Powered by Linux