stty not restored in trap when executing read with options

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

stty not restored in trap when executing read with options

Quentin L'Hours
Hello,

bash: 4.4.12(1)-release
stty: 8.25 (GNU version)

When running this small script:

 > trap 'stty echo; exit 0' INT
 > stty -echo
 > read -d a

and hitting Ctrl-c

stty should be restored in the trap, but doesn't (the trap code is
executed though).
This also seems to happen with read -s and -n options.

Calling read without options restores stty as expected.

ksh (93u+) and zsh (5.2) also restores stty as expected.

Finally tested this on bash 3.2.57(1)-release and it's working as
expected, stty is restored in the trap.

--
Quentin L'Hours

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: stty not restored in trap when executing read with options

Chet Ramey
On 7/16/17 6:59 PM, Quentin L'Hours wrote:

> Hello,
>
> bash: 4.4.12(1)-release
> stty: 8.25 (GNU version)
>
> When running this small script:
>
>> trap 'stty echo; exit 0' INT
>> stty -echo
>> read -d a
>
> and hitting Ctrl-c
>
> stty should be restored in the trap, but doesn't (the trap code is executed
> though).
> This also seems to happen with read -s and -n options.

This is pretty easy to explain.  The read builtin takes great care to
restore the terminal settings it changes before the shell exits.

This was prompted by several bug reports over time, the last of which
(the one that finally resulted in the change) is:

http://lists.gnu.org/archive/html/bug-bash/2014-12/msg00151.html

If the shell exits as the result of a signal, even if it exits out of a
trap handler, the read builtin restores the terminal attributes that
were in effect when it was invoked.

Chet

--
``The lyf so short, the craft so long to lerne.'' - Chaucer
                 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU    [hidden email]    http://cnswww.cns.cwru.edu/~chet/

Loading...