On 2016-08-04 at 17:04 Dan Cross <[email protected]> wrote: > FYI. cool! glad they are already on the case!
barret > > ---------- Forwarded message ---------- > From: Dan Cross <[email protected]> > Date: Thu, Aug 4, 2016 at 5:04 PM > Subject: Re: Test exit status misinterpreted in scripts when buit without > job control > To: [email protected] > Cc: [email protected] > > > On Thu, Aug 4, 2016 at 2:36 PM, Chet Ramey <[email protected]> wrote: > > > 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. > > > > Thanks, Chet. FYI, I tried building for the research kernel with NLS > enabled and am still seeing the problem. Our patch is pretty minimal > (mostly just adding the name of the OS as supported in the various > configure scripts, and we have a requirement that strings written using > 'echo' get written with one system call, so I bypass stdio for that. Oh, > and we have another context string in addition to errno that we print on > errors). Also, I was able to reproduce on an unpatched bash on Linux with > NLS enabled: > > % ../configure --prefix=/usr --bindir=/bin --without-bash-malloc > --disable-job-control > % grep NLS config.h > #define ENABLE_NLS 1 > % make > (build output omitted for brevity) > % ./bash --noprofile --norc > $ ./foo.sh 1 2 3 4 > 4 args is not less than 2 > $ ./foo.sh 1 2 3 4 > 4 args is less than 2 > $ exit > % > > Thanks again! > > - Dan C. > > (PS: If you're curious, we're porting bash to the Akaros operating system: > http://akaros.org/) > -- You received this message because you are subscribed to the Google Groups "Akaros" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. For more options, visit https://groups.google.com/d/optout.
