LINUX.IE, website of the Irish Linux Users' Group
Tux rules!

   
Home
New Users
Articles
Download
Projects
Community
Vendors

  Print Version
Email to...
 
Archives:


planetILUG

Recent News

News Archive


Join the
ILUG
on FaceBook


Join the
ILUG
on LinkedIn


Join the
ILUG SETI
Group



















 
 :: Mailing Lists

[ILUG] bash v4 bug with `coproc' and `wait'? (No, just bash being silly.)

[ILUG] bash v4 bug with `coproc' and `wait'? (No, just bash being silly.)

Brian Foster blf at utvinternet.ie
Tue May 15 10:02:41 IST 2012


 is this a bash(1) v4 bug, or am I missing something?

 script:
=====(cut here and below)=====script `t'=====
#!/bin/bash

echo "${BASH_VERSION[@]}"

SLEEP=${SLEEP:-sleep}

report() {
	echo -n ${1:?} wait returned ${2:?}
	if [ $2 -eq ${3:?} ]; then
		echo \ ... Ok
	else
		echo \ not expected $3
	fi
}

want=17
( exit $want ) &
$SLEEP 1		# simulate some processing
wait $!
report 1st $? $want

want=42
coproc { exit 42; }
$SLEEP 1		# simulate some processing
wait $COPROC_PID
report 2nd $? $want

want=55
coproc exit $want
$SLEEP 1		# simulate some processing
wait $COPROC_PID
report 3rd $? $want

want=69
coproc ( exit $want )
$SLEEP 1		# simulate some processing
wait $COPROC_PID
report 4th $? $want
=====(cut here and below)=====script `t'=====

 output:
=====(cut here and below)=====output of above script=====
$ bash ./t
4.2.10(1)-release
1st wait returned 17 ... Ok
2nd wait returned 0 not expected 42
3rd wait returned 0 not expected 55
4th wait returned 0 not expected 69
$
$ SLEEP=: bash ./t
4.2.10(1)-release
1st wait returned 17 ... Ok
2nd wait returned 42 ... Ok
3rd wait returned 55 ... Ok
4th wait returned 69 ... Ok
$
=====(cut here and above)=====output of above script=====

 it seems to be the case that if the `wait'
 is done after the coprocess has exited,
 then its status ($?) is always 0, unlike
 background (&) processes.  huh???

 LATE UPDATE:-  ah!  no!  got it... what's
 happening is COPROC_PID is being unset,
 and so the `wait $COPROC_PID' is turning
 into a simple `wait' (no PID(s)), which
 in this case _should_ return 0.

 prove by using:  wait ${COPROC_PID:?}

 silly bash.  silly silly bash.

cheers!
	-blf-

-- 
“How many surrealists does it take to    |  Brian Foster
 change a lightbulb?  Three.  One calms  |  somewhere in south of France
 the warthog, and two fill the bathtub   |     Stop E$$o (ExxonMobil)!
 with brightly-coloured machine tools.”  |       http://www.stopesso.com


More information about the ILUG mailing list
Read this without the formatting.
                                                                                                    

 

Hosted by HEAnet


Maintained by the ILUG website team. The aim of Linux.ie is to support and help commercial and private users of Linux in Ireland. You can display ILUG news in your own webpages, read backend information to find out how. Networking services kindly provided by HEAnet, server kindly donated by Dell. Linux is a trademark of Linus Torvalds, used with permission. No penguins were harmed in the production or maintenance of this highly praised website. Looking for the Indian Linux Users' Group? Try here. If you've read all this and aren't a lawyer: you should be!
RSS Version
Powered by Dell