hush: fix "cmd &
No binary (build failed)
—
(log yok)
| @@ -4141,15 +4141,26 @@ static struct pipe *parse_stream(char **pstring, | |
| && dest.length == 0 && !dest.has_quoted_part | |
| ) { | |
| /* This newline can be ignored. But... | |
| - | * without the below check, interactive shell |
| - | * will ignore even lines with bare <newline>, |
| - | * and show the continuation prompt: |
| + | * Without check #1, interactive shell |
| + | * ignores even bare <newline>, |
| + | * and shows the continuation prompt: |
| * ps1_prompt$ <enter> | |
| - | * ps2> _ <=== wrong prompt, should be ps1 |
| + | * ps2> _ <=== wrong, should be ps1 |
| + | * Without check #2, "cmd & <newline>" |
| + | * is similarly mistreated. |
| + | * (BTW, this makes "cmd & cmd" |
| + | * and "cmd && cmd" non-orthogonal. |
| + | * Really, ask yourself, why |
| + | * "cmd && <newline>" doesn't start |
| + | * cmd but waits for more input? |
| + | * No reason...) |
| */ | |
| struct pipe *pi = ctx.list_head; | |
| - | if (pi->num_cmds != 0) |
| + | if (pi->num_cmds != 0 /* check #1 */ |
| + | && pi->followup != PIPE_BG /* check #2 */ |
| + | ) { |
| continue; | |
| + | } |
| } | |
| /* Treat newline as a command separator. */ | |
| done_pipe(&ctx, PIPE_SEQ); | |