mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Do not exit shell on Ctrl+C with SIGINT ignored (re: 7e5fd3e9)
The killpg(getpgrp(),SIGINT) call added to ed_getchar() in that
commit caused the interactive shell to exit on ^C even if SIGINT is
being ignored. We cannot revert or remove that call without
breaking job control. This commit applies a new fix instead.
Reproducers fixed by this commit:
SIGINT ignored by child:
$ PS1='childshell$ ' ksh
childshell$ trap '' INT
childshell$ (press Ctrl+C)
$
SIGINT ignored by parent:
$ (trap '' INT; ENV=/./dev/null PS1='childshell$ ' ksh)
childshell$ (press Ctrl+C)
$
SIGINT ignored by parent, trapped in child:
$ (trap '' INT; ENV=/./dev/null PS1='childshell$ ' ksh)
childshell$ trap 'echo test' INT
childshell$ (press Ctrl+C)
$
I've experimentally determined that, under these conditions, the
SFIO stream error state is set to 256 == 0400 == SH_EXITSIG.
src/cmd/ksh93/sh/main.c: exfile():
- On EOF or error, do not return (exiting the shell) if the shell
state is interactive and if sferror(iop)==SH_EXITSIG.
- Refactor that block a little to make the new check fit in nicely.
src/cmd/ksh93/tests/pty.sh:
- Test the above three reproducers.
Fixes: https://github.com/ksh93/ksh/issues/343
This commit is contained in:
parent
4856847631
commit
2bc1d814c9
3 changed files with 64 additions and 8 deletions
3
NEWS
3
NEWS
|
|
@ -9,6 +9,9 @@ Any uppercase BUG_* names are modernish shell bug IDs.
|
|||
command to: basename, cat, cp, cut, dirname, getconf, ln, mktemp, mv.
|
||||
Add /opt/ast/bin to your $PATH to use these. Type 'cp --man', etc. for info.
|
||||
|
||||
- A bug introduced on 2020-09-17 was fixed that caused interactive ksh to exit
|
||||
if Ctrl+C was pressed while SIGINT was being ignored (as in "trap '' INT").
|
||||
|
||||
2021-12-13:
|
||||
|
||||
- Fixed a bug introduced on 2020-08-09 that prevented '.' and '..' from
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue