summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--shell/hush.c4
-rw-r--r--shell/hush_test/hush-misc/return1.right1
-rwxr-xr-xshell/hush_test/hush-misc/return1.tests4
3 files changed, 9 insertions, 0 deletions
diff --git a/shell/hush.c b/shell/hush.c
index 339f334..8154ac4 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -5554,6 +5554,10 @@ static void parse_and_run_stream(struct in_str *inp, int end_trigger)
debug_printf_exec("parse_and_run_stream: run_and_free_list\n");
run_and_free_list(pipe_list);
empty = 0;
+#if ENABLE_HUSH_FUNCTIONS
+ if (G.flag_return_in_progress == 1)
+ break;
+#endif
}
}
diff --git a/shell/hush_test/hush-misc/return1.right b/shell/hush_test/hush-misc/return1.right
new file mode 100644
index 0000000..7b24a35
--- /dev/null
+++ b/shell/hush_test/hush-misc/return1.right
@@ -0,0 +1 @@
+Ok:0
diff --git a/shell/hush_test/hush-misc/return1.tests b/shell/hush_test/hush-misc/return1.tests
new file mode 100755
index 0000000..eeb92ef
--- /dev/null
+++ b/shell/hush_test/hush-misc/return1.tests
@@ -0,0 +1,4 @@
+echo "true && return; echo Should not be printed" >return_sourced
+. ./return_sourced
+rm return_sourced
+echo Ok:$?