Subject: Re: bug#60069: [PATCH 2/2] guix-install.sh: Directly exit in case of errors in chk_require.

From: Maxim Cournoyer <[email-masked]>
Date: Wed, 14 Dec 2022 13:33:26 -0500

Hi,

Maxim Cournoyer <[email-masked]> writes:

> Hi Tobias,
>
> Tobias Geerinckx-Rice <[email-masked]> writes:
>
>> Maxim Cournoyer 写道：
>>> -    [ "${#warn}" -ne 0 ] &&
>>> -        { _err "${ERR}Missing commands: ${warn[*]}.";
>>> -          return 1; }
>>> -    +    [ "${#warn}" -ne 0 ] && die "Missing commands:
>>> ${warn[*]}."
>>> +
>>
>> I did not run this, but will it not itself trigger -e  when the test
>> is false?
>
> This apparently falls in the special casing by Bash of what is
> considered a failure when using 'set -e'; here's a test:
>
> $ cat test.sh
> #!/usr/bin/env bash
>
> set -e
>
> [ false ] && echo "hey, we made it!"
>
> $ ./test.sh
> hey, we made it!

The above example was bogus and unnecessary; looking at it more closely,
the test would return true when the 'warn' array contains 1 or more
items (missing commands), which would cause the die command to be
invoked and the script to exit.  The first test handling isn't modified,
so it'll chain though the second part the same as it does now.

I hope that's a better explanation.

-- 
Thanks,
Maxim