Not successful if statements returning error code

Ahmad Fatoum a.fatoum at pengutronix.de
Wed Jul 28 01:56:47 PDT 2021


Hello Andrej,

On 23.07.21 12:18, Andrej Picej wrote:
> Hi all,
> 
> I have a question about Hush shell and the use of its conditional statements.
> We have come upon an interesting behaviour with its return values.
> 
> If the condition of the if statement is not true then the return value is 1 (error code), and if the condition is true the return value is 0 (success).
> 
> Simple test:
>> #!/bin/sh
>> if [ 0 -gt 1 ]; then
>>   echo "0 gt 1, Ret: $?"
>> fi
>> echo "Ret: $?"
>>
>> if [ 2 -gt 1 ]; then
>>   echo "2 gt 1, Ret: $?"
>> fi
>> echo "Ret: $?"
> 
> Output:
>> Ret: 1
>> 2 gt 1, Ret: 0
>> Ret: 0
> 
> This means that if, for example the first if statement (where condition is not met) would be at the end of a script the return value of that whole script would be 1 (error code).
> I don't think this follows standard shell behaviour. If if statement condition is not met this doesn't mean that the return value should be an error code, right?
> Using other shells (bash for example) we can see that the returned value in both cases is 0, which is expected (IMO).
> 
> This behaviour is not new to the Hush or barebox as I could reproduce it on various previous barebox versions (2013.08.0, 2017.12.0 and 2019.11.0).
> 
> Of course, this problem can be easily avoided if at the end of every script we use explicit exit 0. This is doable, but a little annoying.
> 
> Although this is not a deal-breaker for us, I was wondering what is the reason behind this? How do you get around this and are there any plans to fix/modify this in the future so it follows the behaviour of other shells?

I talked with Sascha once before (off-list) about a similar issue. Missing error handling
results in

  [ x1 -eq x2 ] && echo yes || echo no

printing yes.

We agreed that it's ok to break scripts relying on clear hush bugs like this.

I'd thus recommend you to send a patch to fix hush instead of working around it.

Cheers,
Ahmad

> 
> Thank you for your answer.
> 
> Best regards,
> Andrej
> 
> _______________________________________________
> barebox mailing list
> barebox at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
> 


-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the barebox mailing list