summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2011-01-18 16:30:07 (GMT)
committer Denys Vlasenko <vda.linux@googlemail.com>2011-01-18 16:30:07 (GMT)
commit98c46d10ee81f206f274da312086a3f0533582af (patch)
tree5e8aafc0e711f6d302f3fafa66932b2ed040da20
parentb9f2d9f7d9b4a9b6fbb6a28a8c0bcf8e0e3b1704 (diff)
downloadbusybox-98c46d10ee81f206f274da312086a3f0533582af.tar.gz
busybox-98c46d10ee81f206f274da312086a3f0533582af.tar.bz2
hush: fix "cmd & <newline>" problem
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--shell/hush.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/shell/hush.c b/shell/hush.c
index 6970c50..3581ba1 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -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);