bash のインタラクティブ モードを使用して、単純なターミナル GUI を実装しようとしています。bash の呼び出しに成功し、そのstdoutを取得して、すべてをテキスト ビューに出力しました。コマンドを実行できるように、ユーザー入力をテキスト ビューから bash のstdinに転送します。エラーメッセージが表示されないことを除けば、うまく機能します。
しかし、bash のstderrを自分のテキスト ビューに出力すると、奇妙なことに気付きました。エラーメッセージを受け取るようになったことに加えて、bash はstdinからstderrにすべてを渡すようです。このため、入力したすべての文字が 2 回出力されます (1 回は通常入力するため、もう 1 回はstderrからすべてを出力するため)。
また、stderr ( bash-3.2$
) を介してプロンプトを出力するようです。これは予想される動作ですか?これを抑えることはできますか?
また、ユーザー入力をキャプチャして (ユーザーがテキスト ビューに直接入力できないように)、bash に依存してユーザー入力を出力しようとしました。stdoutとstderrを介した出力の順序がランダムであることを除いて、これはほとんど機能しています。
のようなコマンドをecho test
入力してEnterキーを押すと、時々次のようになります:
(2番目test
は出力です。入力しませんでしたtesttest
)
bash-3.2$ echo testtest
bash-3.2$
時々私は得る:
bash-3.2$ echo test
bash-3.2$ test
final \n
、 output 、および nextを受け取る順序bash-3.2$
は明らかに混同されています。