RFR: 8011350 : hgforesth.sh fails if sh is not bash

David Holmes david.holmes at oracle.com
Wed Apr 3 07:21:12 UTC 2013


On 3/04/2013 1:03 PM, Mike Duigou wrote:
> Hello all;
>
> Further testing on JDK-8011342 revealed that hgforest.sh can fail if the sh shell is not bash. The problem appears to be due to mixing of -o -a and ! in [] test expressions.

What a bizarre failure mode. In the tests I did:

/usr/local/bin/python -V | cut -f 1 -d " "

produces

Python 2.7.3

on both sh and bash. Yet when it is part of the script:

if [ -x "$python" -a ! -d "$python" -a  "`${python} -V 2>&1 | cut -f 1 
-d " "`" == "Python" ] ; then

it evaluates to just "Python" on bash.

> I have prepared a webrev here:
>
> http://cr.openjdk.java.net/~mduigou/JDK-8011350/0/webrev/common/bin/hgforest.sh.udiff.html
>
> This converts all of the potentially problematic [ expr -o expr ] [ expr -a expr ] and [ expr -{o|a} ! expr ] to use "test". My conversions are based on the advice of the autotools chapter on "Writing portable Bourne Shell" (http://sourceware.org/autobook/autobook/autobook_208.html#SEC208) for avoiding potential problems.
>
> The other option is just to require bash which is already required by the new build process.

I'm inclined to go for the latter though that requires a change to 
get_source.sh as well to use bash.

But I defer to the build gurus.

BTW this is now a P1 as it blocks the TL nightly build as the pre-build 
is done on a Solaris machine.

David

> Mike
>



More information about the build-dev mailing list