私は比較的新しいLinux Mintをインストールしていますが、これまで大きな問題が見つからず、ユーザー入力を対話的に読み取るコマンドラインツールを使用できないことに気づきました。期待どおりに 1 行の入力を使用して入力キーを処理するのではなく、^M
端末に一連の文字を印刷し、入力を続けるように求めます。
例えばgit add -p
:
Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? y^M
もう少しテストした後、すべてのシェルread
操作がこの操作(inzsh
とout bash
)を実行しており、sh
完全に使用できないことに気づきました。
zshとバッシュ:
$ read test
value^M^C
$
シェン:
$ echo "test"^M^C
$ exit^M^M^M^C
$
新しいターミナルを開いたが影響を受けないようで、ここにとどまらないが、このターミナルがどのように動作するかを作るために何が起こっているのか知りたい。人々の理論をテストするために、壊れた部分をしばらく開いておきます。
ベストアンサー1
これは通常、端末を生の入力モードに設定したプログラムが予期せず終了し、端末設定を以前の値に復元できない場合に発生します。
簡単な操作でstty sane
すべてが正常にリセットされます。
端末を「生」にする過程で閉じる^M
ことで\r
^J
\n
ICRNL
c_iflag
テミオス設定。これはコマンドラインからも実行できますstty -icrnl
。
Bashのようなシェルのコマンドラインは通常これの影響を受けません。なぜなら、bashは独自のネイティブ端末を作成し、独自のキー翻訳を実行するためです(挿入点を左右に移動、コマンドライン履歴などの良い行編集機能を提供するため)。他のコマンドを実行した場合のみ、デフォルトの端末設定を復元します。