From: Reece Dunn Date: Mon, 11 Aug 2008 15:59:32 GMT Subject: Re: git-bisect: weird usage of read(1) Message-ID: <3f4fd2640808110859r148550d2h833dae05b9e6544e@mail.gmail.com> In-Reply-To: <38b2ab8a0808110718x2f63608ga3d2d77e317ce4eb@mail.gmail.com> 2008/8/11 Francis Moreau : > Hello > > On Mon, Aug 11, 2008 at 4:15 PM, Johannes Schindelin > wrote: >> Hi, >> >> On Mon, 11 Aug 2008, Francis Moreau wrote: >> >>> I found this in git bisect: >>> >>> printf >&2 'Are you sure [Y/n]? ' >>> case "$(read yesno)" in [Nn]*) exit 1 ;; esac >>> >>> which looks very weird since read(1) returns a status and not the >>> string reads from std input. >>> > > sorry I should have said that there's a status but no output... > >>> Am I missing something ? >> >> Yes. "$()" does not return the status, but the output. >> > > But what's the output in that case ? Using cygwin+bash, I get: $ echo $(read yesno) n $ echo $(read yesno; echo $yesno) n n $ $(read yesno) && echo yes || echo no n yes $ $(read yesno) && echo yes || echo no y yes $ case "$(read yesno)" in [Nn]*) echo "no" ;; esac n $ case "$(read yesno)" in [Nn]*) echo "no" ;; esac y $ case "$(read yesno; echo $yesno)" in [Nn]*) echo "no" ;; esac n no $ case "$(read yesno; echo $yesno)" in [Nn]*) echo "no" ;; esac y So >>> case "$(read yesno)" in [Nn]*) exit 1 ;; esac does not work as expected. Replacing this with case "$(read yesno; echo $yesno)" in [Nn]*) exit 1 ;; esac would work as intended, as Mikael has pointed out. - Reece