場合によっては、子プロセス(Rubyスクリプトなど)を生成するターミナルプログラムを実行しても、子IO.popen
プロセスのIOハンドルが正しくクリーンアップされていない場合(たとえばIO.close
)、プログラムが終了し、新しいシェルプロンプトが表示されたときにターミナル入力が正しく機能しないそうです。
たとえば、矢印キーとメタキーまたはCtrlキーはキーストロークを変更して設定されたキーバインディングをトリガーするのではなく、エスケープシーケンス(たとえば^[<key>
)がターミナルプロンプトに出力されます。たとえば、<M-o>
3回クリックすると次のようになります。
$ ^[o^[o^[o
この状態でキーを押すと、<C-c>
この問題のない新しいプロンプトが生成されます。そのため、以前のプロセスが終了したときにIOリソースが閉じられず、端末が奇妙な状態にあるようです。誰かが正確に何が起こっているのかを説明できますか?
ベストアンサー1
これはxtermとbashのように聞こえます。これ基本的なbash設定メタモードが設定され、一部のプログラムはオフにし(両方ともエスケープシーケンスを介して)、bashに組み込まれているリセットを介して復元します。
次の結果を送信すると、必要な方法で動作させることができます。
tput smm
プロンプト文字列に(一般的に注意するのは、文字列を囲む必要があり、\[
bash\]
に文字列の「幅」を無視するように指示することです)。