On 8/4/16 12:05 PM, Dan Cross wrote:

> Bash Version: 4.3
> Patch Level: 30
> Release Status: release
> 
> Description:
>         When bash is built without job control, shell scripts that use
>         the 'test' builtin (e.g., via '[') in conditionals may take the
>         wrong branch becuase the exit status of the test is lost.
> 
> Repeat-By:
>         Configure without job control.  Via e.g.,
>         ./configure --prefix=/usr --bindir=/bin --without-bash-malloc 
> --disable-nls --disable-job-control
>         Invoke the resulting shell and run the following sequence of commands:
> 
>         $ cat > foo.sh
>         if [ $# -lt 2 ]
>         then
>                 echo "$# args is less than 2"
>         else
>                 echo "$# args is not less than 2"
>         fi
>         $ chmod +x ./foo.sh
>         $ ./foo.sh 1 2 3 4
>         4 args is less than 2
>         $
> 
>         Observe the output: '4' is not actually less than '2' yet the
>         script incorrectly reports it as such.

Thanks for the report.  I took a quick look at this, and it's not disabling
job control that does it: it's disabling both job control and nls.
Disabling either one while leaving the other enabled doesn't produce this
error (which only happens in the case where you run a script with the
execute bit set without a #! line after running an executable that causes
the shell to call waitpid()).  It's a strange set of circumstances.
I'll see what I can find.

Chet

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU    c...@case.edu    http://cnswww.cns.cwru.edu/~chet/

Reply via email to