From 5726df5f94f973eaa097d9853ceff2bd6b748d97 Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Sun, 12 Sep 2021 11:21:48 +0100 Subject: [PATCH] ash: let ignoreeof only affect interactive shells Commit fb7d6c89 from Harald van Dijk's gwsh variant of ash (https://github.com/hvdijk/gwsh): ignoreeof is documented as only having an effect for interactive shells, but is implemented as having mostly the same effect for interactive shells as for non-interactive shells. Change the implementation to match the documentation. Test case: $SHELL -o ignoreeof /dev/null function old new delta cmdloop 359 361 +2 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/0 up/down: 2/0) Total: 2 bytes Signed-off-by: Ron Yorston Signed-off-by: Denys Vlasenko --- shell/ash.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/shell/ash.c b/shell/ash.c index 5743b2377..b12b859d5 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -13508,12 +13508,13 @@ cmdloop(int top) if (!top || numeof >= 50) break; if (!stoppedjobs()) { + if (!iflag) + break; if (!Iflag) { - if (iflag) { - newline_and_flush(stderr); - } + newline_and_flush(stderr); break; } + /* "set -o ignoreeof" active, do not exit command loop on ^D */ out2str("\nUse \"exit\" to leave shell.\n"); } numeof++;