[git commit] hush: "wait $!; echo $?" should return 127 if $! already exited

Denys Vlasenko vda.linux at googlemail.com
Mon Nov 7 22:07:21 UTC 2016


commit: https://git.busybox.net/busybox/commit/?id=26ad94bedcc6a4aa3feb07ea032709bcd517ee46
branch: https://git.busybox.net/busybox/commit/?id=refs/heads/master

It would be nice to provide bash-like "remember las exitcode"
thingy, but it's a bit complex. For now, match ash and dash.

Signed-off-by: Denys Vlasenko <vda.linux at googlemail.com>
---
 shell/hush.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/shell/hush.c b/shell/hush.c
index b842d6e..7683a37 100644
--- a/shell/hush.c
+++ b/shell/hush.c
@@ -9636,12 +9636,13 @@ static int FAST_FUNC builtin_wait(char **argv)
 					/* "wait $!" but last bg task has already exited. Try:
 					 * (sleep 1; exit 3) & sleep 2; echo $?; wait $!; echo $?
 					 * In bash it prints exitcode 0, then 3.
+					 * In dash, it is 127.
 					 */
-					ret = 0; /* FIXME */
-					continue;
+					/* ret = G.last_bg_pid_exitstatus - FIXME */
+				} else {
+					/* Example: "wait 1". mimic bash message */
+					bb_error_msg("wait: pid %d is not a child of this shell", (int)pid);
 				}
-				/* Example: "wait 1". mimic bash message */
-				bb_error_msg("wait: pid %d is not a child of this shell", (int)pid);
 			} else {
 				/* ??? */
 				bb_perror_msg("wait %s", *argv);


More information about the busybox-cvs mailing list