On Sun, Apr 24, 2011 at 11:03 PM, andrey mirtchovski <mirtchov...@gmail.com> wrote: >> #!/usr/local/plan9/bin/9 rc >> echo first at path: $path(1) >> for (i in `{seq 1 5}){ >> if (test $i -eq 3) { >> echo $i equals 3 >> } >> if not echo $i is different from 3 >> } > > NB: in general, you don't need 'test'. use "if (~ $i 3) {}". > > that said, now I'm convinced there's a bug somewhere. I got your code > to fail under the condition that rc is started via the '9' environment > (9 rc). the type of 'test' binary doesn't matter -- both /bin/test and > $PLAN9/bin/test break under '9', but don't break without it. the '9' > script is pretty simple, but there appear do be some side-effects > (probably due to \r being transmitted over the network?). here's the > simplest version of your script: > > $ cat t.rc > #!/usr/bin/env rc > exec rc > $ > > dial and test: > > $ dial -e 'tcp!localhost!8080' > ######## no breakage > /bin/test 1 -eq 2 ; echo $status > 1 > /bin/test 1 -eq 1; echo $status > > /Users/andrey/plan9/bin/test 1 -eq 2; echo $status > 1 > /Users/andrey/plan9/bin/test 1 -eq 1; echo $status > > ######## now see it break > 9 rc > /bin/test 1 -eq 2 ; echo $status > > /bin/test 1 -eq 1; echo $status > > /Users/andrey/plan9/bin/test 1 -eq 2; echo $status > > /Users/andrey/plan9/bin/test 1 -eq 1; echo $status > > ls | wc > /dev/null; echo $status > | > ls | wc > /dev/null; echo $status > ||| > ls | wc > /dev/null; echo $status > ||||||| > ls | wc > /dev/null; echo $status > ||||||||||||||| > ls | wc > /dev/null; echo $status > ||||||||||||||||||||||||||||||| > > #####back to non-breaking rc: > exit > echo $status > > ls | wc > /dev/null; echo $status > | > ls | wc > /dev/null; echo $status > | > ls | wc > /dev/null; echo $status > | > ls | wc > /dev/null; echo $status > | > ls | wc > /dev/null; echo $status > | > >
I'm seeing this without the 9. It is a Ubuntu 10.04.2 LTS, $ uname -a Linux goitaca 2.6.32-28-generic #55-Ubuntu SMP Mon Jan 10 23:42:43 UTC 2011 x86_64 GNU/Linux