Open two consoles / X terminals. From one, which is attached to say /dev/tty1 (Linux console) or /dev/pts/0 (X terminal), run $ stty -echo. (Now echoing to keyboad is turned off.) Then from the other, run $ stty --file=/dev/tty1 echo.

Now type something in the first terminal. It echoes, ok, the last stty took effect. But once you press the enter key, It reverts to -echo state. Why is this? Is a permanent change possible?

This does not apply to some combinations of stty flags, at least not for 'echo / -echo'. When `$ stty --file= ' is run from the same terminal, it affects permanently.

N.B. Zsh has its own policy for stty. See this question

EDIT: In the first post, I failed to report that this happens in bash, but not in dash. The mention to zsh case was also added.

  • 1
    Your shell is probably do that - resetting terminal modes to allow you to edit command-lines. With more information, this would be a duplicate. Commented Feb 19, 2017 at 11:04
  • Oops, sorry, as you said, it only happens in bash, not in dash. But I can't locate the culprit. Nowhere in the files read at bash startup, there's no stty invocation. PS1 does not matter, right? Any hint? Commented Feb 19, 2017 at 13:15

1 Answer 1


Your shell does this, to help you edit command-lines.

bash's readline library saves/restores terminal modes. You can see this in the rl_prep_terminal and rl_deprep_terminal functions, called indirectly from edit_and_execute_command.

  • Thanks. So it's specific to bash. For the record: it's done in bashline.c. Commented Feb 21, 2017 at 6:38
  • well yes - the last link points there, but the function-name seemed more useful. Commented Feb 21, 2017 at 8:18

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .