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 <rmy@pobox.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Ron Yorston 2021-09-12 11:21:48 +01:00 committed by Denys Vlasenko
parent 50239a665c
commit 5726df5f94

View File

@ -13508,12 +13508,13 @@ cmdloop(int top)
if (!top || numeof >= 50) if (!top || numeof >= 50)
break; break;
if (!stoppedjobs()) { if (!stoppedjobs()) {
if (!iflag)
break;
if (!Iflag) { if (!Iflag) {
if (iflag) {
newline_and_flush(stderr); newline_and_flush(stderr);
}
break; break;
} }
/* "set -o ignoreeof" active, do not exit command loop on ^D */
out2str("\nUse \"exit\" to leave shell.\n"); out2str("\nUse \"exit\" to leave shell.\n");
} }
numeof++; numeof++;