commands like the following echo `'' {echo a} b c would only echo "a". the remaining arguments would be hidden due to bad code generation. i'm surprised this bug took so long to find Reference: /n/atom/patch/applied/rcbqbug Date: Sun Jun 19 22:35:56 CES 2016 Signed-off-by: quanstro@quanstro.net --- /sys/src/cmd/rc/code.c Sun Jun 19 22:34:12 2016 +++ /sys/src/cmd/rc/code.c Sun Jun 19 22:34:14 2016 @@ -147,6 +147,7 @@ case '`': emitf(Xmark); if(c0==0){ + emitf(Xmark); emitf(Xword); emits(strdup("ifs")); emitf(Xdol); --- /sys/src/cmd/rc/havefork.c Sun Jun 19 22:34:16 2016 +++ /sys/src/cmd/rc/havefork.c Sun Jun 19 22:34:17 2016 @@ -79,7 +79,7 @@ void Xbackq(void) { - int l, n, pw, inc, pid; + int l, n, inc, pid; int pfd[2]; char *s, *wd, *ewd, *stop; struct io *f; @@ -87,11 +87,8 @@ Rune r; stop = ""; - pw = 0; - if(runq->argv && runq->argv->words){ + if(runq->argv && runq->argv->words) stop = runq->argv->words->word; - pw = 1; - } if(pipe(pfd)<0){ Xerror("can't make pipe"); return; @@ -144,8 +141,7 @@ efree(wd); closeio(f); Waitfor(pid, 0); - if(pw) - popword(); /* ditch split in "stop" */ + poplist(); /* ditch split in "stop" */ /* v points to reversed arglist -- reverse it onto argv */ while(v){ nextv = v->next; --- /sys/src/cmd/rc/haventfork.c Sun Jun 19 22:34:19 2016 +++ /sys/src/cmd/rc/haventfork.c Sun Jun 19 22:34:20 2016 @@ -57,7 +57,7 @@ Xbackq(void) { char **argv; - int l, n, pw, inc, pid; + int l, n, inc, pid; int pfd[2]; char *s, *wd, *ewd, *stop; struct io *f; @@ -66,11 +66,8 @@ Rune r; stop = ""; - pw = 0; - if(runq->argv && runq->argv->words){ + if(runq->argv && runq->argv->words) stop = runq->argv->words->word; - pw = 1; - } if(pipe(pfd)<0){ Xerror("can't make pipe"); return; @@ -123,8 +120,7 @@ efree(wd); closeio(f); Waitfor(pid, 1); - if(pw) - popword(); /* ditch split in "stop" */ + poplist(); /* ditch split in "stop" */ /* v points to reversed arglist -- reverse it onto argv */ while(v){ nextv=v->next;