0

次のパイプ処理を行うプログラムを作成する演習がありました。

ls -la | grep "^d" | more

ただし、プログラムを実行した後、bash インタープリターは行を改行したり、コマンドを正しく表示したりしませんでしたが、それらを実行した後、結果が表示され、コンソールへの入力が標準出力ではなく別の場所にあるように見え、理由が見つかりませんこの動作。

stdio がリダイレクトされた 3 つの子プロセスを使用して、それらの間のパイプを接続しています。

プログラムは正常に終了し、良好な結果が表示されます。エラーは表示されません。また、実行後にすべてが正常に動作する代わりに cat を使用している場合、more によって一部のシステム値が変更され、元に戻されない可能性はありますか?

4

1 に答える 1

0

はおそらくmore、TTY でエコー モードと正規モードをオフにし (「参考文献」を参照man 3 termios)、終了する前にそれらをオンに戻さない可能性があります (理由は、TTY が強制終了される可能性がないためか、TTY に接続されていると認識されていないためです)。 . gdb にアタッチしmoreて、なぜそれがおかしいのかを調べるか、終了する前に端末を自分でリセットすることができます。

于 2013-06-24T10:28:30.603 に答える