| --- a/libbb/lineedit.c |
| +++ b/libbb/lineedit.c |
| @@ -2467,6 +2467,7 @@ int FAST_FUNC read_line_input(line_input |
| #endif |
| struct termios initial_settings; |
| struct termios new_settings; |
| + struct termios tmp_settings; |
| char read_key_buffer[KEYCODE_BUFFER_SIZE]; |
| |
| INIT_S(); |
| @@ -3006,7 +3007,15 @@ int FAST_FUNC read_line_input(line_input |
| #endif |
| |
| /* restore initial_settings */ |
| - tcsetattr_stdin_TCSANOW(&initial_settings); |
| + if (tcgetattr(STDIN_FILENO, &tmp_settings) < 0){ |
| + tcsetattr_stdin_TCSANOW(&initial_settings); |
| + }else{ |
| + tmp_settings.c_lflag |= (ICANON | ECHO | ECHONL | ISIG); |
| + tmp_settings.c_cc[VMIN] = initial_settings.c_cc[VMIN]; |
| + tmp_settings.c_cc[VTIME] = initial_settings.c_cc[VTIME]; |
| + tcsetattr_stdin_TCSANOW(&tmp_settings); |
| + } |
| + |
| #if ENABLE_FEATURE_EDITING_WINCH |
| /* restore SIGWINCH handler */ |
| sigaction_set(SIGWINCH, &S.SIGWINCH_handler); |