summaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
Diffstat (limited to 'shell')
-rw-r--r--shell/hush.c15
-rw-r--r--shell/hush_test/hush-misc/nommu2.right5
-rwxr-xr-xshell/hush_test/hush-misc/nommu2.tests5
3 files changed, 22 insertions, 3 deletions
diff --git a/shell/hush.c b/shell/hush.c
index d02e68d..7d851ed 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -4406,9 +4406,15 @@ static void debug_print_tree(struct pipe *pi, int lvl)
lvl*2, "", prn,
command->assignment_cnt);
if (command->group) {
- fprintf(stderr, " group %s: (argv=%p)\n",
+ fprintf(stderr, " group %s: (argv=%p)%s%s\n",
CMDTYPE[command->cmd_type],
- argv);
+ argv
+#if !BB_MMU
+ , " group_as_string:", command->group_as_string
+#else
+ , "", ""
+#endif
+ );
debug_print_tree(command->group, lvl+1);
prn++;
continue;
@@ -5986,7 +5992,7 @@ static int handle_dollar(o_string *as_string,
# if !BB_MMU
if (as_string) {
o_addstr(as_string, dest->data + pos);
- o_addchr(as_string, '`');
+ o_addchr(as_string, ')');
}
# endif
o_addchr(dest, SPECIAL_VAR_SYMBOL);
@@ -6535,6 +6541,9 @@ static struct pipe *parse_stream(char **pstring,
* with redirect_opt_num(), but bash doesn't do it.
* "echo foo 2| cat" yields "foo 2". */
done_command(&ctx);
+#if !BB_MMU
+ o_reset_to_empty_unquoted(&ctx.as_string);
+#endif
}
goto new_cmd;
case '(':
diff --git a/shell/hush_test/hush-misc/nommu2.right b/shell/hush_test/hush-misc/nommu2.right
new file mode 100644
index 0000000..fb8ba8b
--- /dev/null
+++ b/shell/hush_test/hush-misc/nommu2.right
@@ -0,0 +1,5 @@
+Ok
+Ok
+Ok
+Ok
+Done
diff --git a/shell/hush_test/hush-misc/nommu2.tests b/shell/hush_test/hush-misc/nommu2.tests
new file mode 100755
index 0000000..61ed5ce
--- /dev/null
+++ b/shell/hush_test/hush-misc/nommu2.tests
@@ -0,0 +1,5 @@
+echo Not shown | if true; then echo $(echo Ok); fi
+echo Not shown | if true; then echo `echo Ok`; fi
+echo Not shown | ( if true; then echo $(echo Ok); fi )
+echo Not shown | ( if true; then echo `echo Ok`; fi )
+echo Done