Bashがstty設定を尊重しないのはなぜですか?

Bashがstty設定を尊重しないのはなぜですか?

~から回答前の質問の1つで、シェル(bashなど)にはnot match機能があることを学びましたstty(1)。特に、標準モードstty icanon(ラインルールによるルールの編集など)を有効にする設定を使用して、rawモードで実行できます。 )。

これに関して

  1. 実行中の各プロセス(プロセスグループ)がその端末に対して独自の設定を構成できると言うのは正しいですか?つまり、インスタンスを設定するシステム全体のポイントはなく、tty各プロセス(プロセスグループ)ごとに個別です。 (したがって、 bash はコマンド名の読み取りを開始する前に明示的に生モードを設定します.)
  2. 正確にどのようなstty(1)影響がありますか?私の考えでは、これは一連のユーザー設定を実装したようです。端末エミュレータ使用される端末については、ptyマスター端末です。
  3. 両側が通信しているときにスレーブでbashを実行し、マスターでターミナルエミュレータを実行すると、異なるtty設定が設定されます(bash:「即時文字送信、行編集なし」、エミュレータ:「EOLから文字送信、行エディタを使用する))、なぜbashのルールが勝つのですか?どのような状況がこの優先順位に影響を与えますか?
  4. catbashを介していくつかのコマンドを実行すると、stty(1)設定が適用されます。もしそうなら、これはプログラムを実行する前にbashがそれを明示的にデフォルトに設定することを意味しますか、それともcat別の方法で「継承」されますか?

答え1

すべてのプロセスを使用してtcsetattrターミナルドライバのプロパティを変更できます(参考man -s 3 termios文献の完全な608行ストーリーを参照)。端末自体は最後に見た状態だけを維持し、他の記録は維持しません。

丁寧な使い方は、すべての変更を入れ子にすることです。これを変更するすべてのプロセスは、最初に現在のセットを読み取って保存し、変更したい項目のみを変更して終了する前に、開始された元のセット(終了セットを含む)を復元する必要があります。 )できる)。

一度に1行(正規入力)から単一文字に切り替えるのは、termios構造のc_lflagメンバーの1ビット変更であり、必要なビットマスクにはICANON定義があります。同様にECHOかどうかは反転します。

関連情報