hello, I cannot reproduce it in anyway on mac os x86_64 with any version after 4.2, but I see your output on i686 linux with 4.3 and 4.4. Seems system dependent, and also: it is enough to change line 10 to:
/bin/echo final or stdbuf -o0 -i0 -e0 echo final to get expected results. I wonder if calling fflush(0); somewhere in echo builtin will not fix this? As for https://github.com/golang/go/issues/13789 and removal of the repository: running code like: rm -rf pkg $(go env GOROOT)/${installdir} is a oneway ticket to oblivion no matter what. Never do that. Check four times, that the directory you are removing with rm -rf existst, and that it is what you really want to delete, also use "" so next time you get output: '/ ok' you do not wipe your everything. cheers, pg On Tue, Jan 5, 2016 at 5:47 PM, <c...@cs.toronto.edu> wrote: > Configuration Information [Automatically generated, do not change]: > Machine: x86_64 > OS: linux-gnu > Compiler: gcc > Compilation CFLAGS: -DPROGRAM='bash' -DCONF_HOSTTYPE='x86_64' > -DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='x86_64-pc-linux-gnu' > -DCONF_VENDOR='pc' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' -DSHELL > -DHAVE_CONFIG_H -I. -I../. -I.././include -I.././lib -D_FORTIFY_SOURCE=2 > -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat > -Werror=format-security -Wall > uname output: Linux apps0 3.13.0-65-generic #106-Ubuntu SMP Fri Oct 2 > 22:08:27 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux > Machine Type: x86_64-pc-linux-gnu > > Bash Version: 4.3 > Patch Level: 11 > Release Status: release > > Description: > > If Bash writes to stdout with the built in echo and gets a SIGPIPE, > it can incorrectly buffer and then repeat this would-have-been output > in at least $(...) things invoked in a cleanup function and in fact > in some other contexts as well. To see this in action, create the > following script as /tmp/repro: > > #!/bin/bash > function cleanup() { > r1=$(/bin/echo one) > r2=$(/bin/echo two) > echo $r1 '!' $r2 1>&2 > #echo $r1 '!' $r2 >>/tmp/logout > } > trap cleanup EXIT > sleep 1 > echo final > > Run it as '/tmp/repro | false'. The output produced is the clearly > incorrect: > $ /tmp/repro | false > final > one final ! two final > > If you switch the 'echo' to the commented out version, the bare 'final' > disappears but the other two remain. > > Although I am filing this bug report from an Ubuntu 14.04 LTS machine, > this issue also reproduces with the Fedora 22 and Fedora 23 versions > of 'version 4.3.42(1)-release' and probably on other versions as well. > > For your potential reference, the original issue that uncovered this > problem is covered here: > https://github.com/golang/go/issues/13789 > >