アクティブフォアグラウンドプロセスを持つ端末の制御文字

アクティブフォアグラウンドプロセスを持つ端末の制御文字

前景の端末で実行されているプロセスがあるとしましょう。起動中にコマンドを入力してEnterキーを押すと、プロセスが完了するとコマンドが実行されます。

今、「一般」文字だけでなく、制御文字も入力したいと思います。何らかの理由で、これらの制御文字は文字通り再エコーされますが、前景プロセスが完了すると正しく解釈されません。

たとえば、この問題について説明します。

deso@XXX ~ $ sleep 10
echo test
deso@XXX ~ $ echo test
test

スリープモードが有効な場合は、「echo test」と入力してEnterキーを押すと、10秒後に実行されます。これで、同じ端末で(私が見たテキスト出力は次のようになります):

deso@XXX ~ $ sleep 10
^R
echo
deso@XXX ~ $ echo

deso@XXX ~ $

私の意図は、スリープが有効になっている間にreadlineのリバース履歴検索機能を呼び出すことです(これは前に入力した「エコーテスト」を見つける必要があります)。シェルが私の入力を待っている場合は、Ctrl-Rを使用して操作を実行できます。 Ctrl-Rはアクティブプロセスに対して無視されるようです(少なくともリバース履歴の検索は開始されません)。これはすべてLinuxにあります(xterm + tmux + bashを使用していますが、tmuxを使用せずにbashの代わりにbusyboxを使用してみました)。

興味深いのは、VMware ESX(Business Box、つまりAshをシェルとして使用)で期待どおりに機能することです。つまり、制御文字は文字通り反転されず、制御文字として受け入れられ、解釈されます(残りの文字として)。フォアグラウンドプロセスが完了した後)。これは、上記の例では履歴検索が呼び出され、最後の「echo」コマンド(「echo test」)が検索され実行されることを意味します。

私の質問は:誰がこの行動に影響を与えましたか?ターミナル、シェル、カーネル?これに関して、LinuxがESXのように動作するようにする方法はありますか?前述のように、私は他のシェル(bashとash)と異なるターミナルエミュレータ(xtermとurxvt)を使って同じ実験を試しました。行動は常に同じです。

ベストアンサー1

おすすめ記事