web-dev-qa-db-ja.com

端末で入力エコーを復元するにはどうすればよいですか?

スクリプトがパスワードプロンプトで強制終了されると、入力がターミナルにエコー表示されなくなることがあります。つまり、通常はターミナルで、これが表示されます。

$ _
<after typing 'foobar':>
$ foobar_

しかし、この場合、入力した内容がわかりません。

端末を再起動して通常の設定に戻すことができることはわかっていますが、再起動せずに入力エコーを復元する方法はありますか?

12
congusbongus

Bashの場合、通常はresetと入力するだけで、「おかしい」ままになっているものはすべて修正されます。 tsetとしても知られているように見えますが、それぞれを呼び出すと少し異なります。

tset, reset - terminal initialization

   When  invoked  as  reset,  tset  sets  cooked and echo modes, turns off
   cbreak and raw modes, turns on newline translation and resets any unset
   special  characters  to  their default values before doing the terminal
   initialization described above.  This is useful after  a  program  dies
   leaving a terminal in an abnormal state.  Note, you may have to type

       <LF>reset<LF>

   (the  line-feed character is normally control-J) to get the terminal to
   work, as carriage-return may no longer  work  in  the  abnormal  state.
   Also, the terminal will often not echo the command.
20
Xen2050

stty コマンドを使用します。具体的には、次のコマンドを実行します。

stty echo

これにより、おそらくパスワードプロンプト中にオフにされたエコー(入力文字の印刷)が復元されます。

端末設定をすべて表示するには、stty -aを実行します。入力は非表示でしたが、出力のどこかに-echoが表示されるはずです。修正後、代わりにechoが表示されます。

6
congusbongus