Bashのような最新のシェルがrawモードで実行されているときに、「stty -a」が出力に「raw」をリストしないのはなぜですか?

Bashのような最新のシェルがrawモードで実行されているときに、「stty -a」が出力に「raw」をリストしないのはなぜですか?

Bashのような最新のシェルがrawモードで実行されているのに、なぜstty -a出力に表示されないのですか?raw

私はすべての最新のシェルがrawモードで実行されるべきであることを知っています。つまり:

  • 文字ごとに入力してください。
  • エコーが無効になっています。
  • 端子入出力のすべての特殊処理が無効になります。

Readline はユーザー入力を処理します。

rawでは、なぜ出力に表示されないのですかstty -a

答え1

それのおかげでオリジナルモード近似値です。正式な定義はありませんオリジナルモード実際、これはAPIごとに異なる意味を持ちます。

彼らが意味するのは、bashこのようなシェルが独自のラインエディタを無効にすることを実装しているということです。一部ttyラインルールの特徴。具体的には、独自のラインエディタ(icanon別名設定-cbreak)とローカルでラインルールを無効にする必要がありますecho^C(設定)isig時にSIGINT送信などの他の回線規則機能を無効にしません。

stty -a個々の個々の用語の設定(たとえばicanon、、、echoisig)を報告します。

stty一部のエイリアスもサポートしています。置く一度に複数の設定があります(例sanecookedまたは...)。raw

stty rawを除くすべてのttyライン規約機能を無効にしますecho。したがって、ラインエディタで機能しない一部の機能(例isig:)を無効にし、無効にしません。bashechobash

GNU実装マニュアルはsttyこれrawと同じです。これは、(他の設定に関係なく)調整できる個々の設定の-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -icanon -opost -isig -iuclc -ixany -imaxbel -xcase min 1 time 0セットです。termiosstty raw

これはエイリアスでopostはなくstty、独自の個別のttyラインルール設定ですが、他のすべての出力後処理設定に影響しますonlcr。つまり、/がolcucオンにならないと効果はありません。これは、これらのすべての出力処理がうまくいかない理由を説明します。onlcrolcucopoststty raw

一部のシステムには、同時に複数の設定を指定できるcfmakeraw()/libc機能があります。cfmakesane()GNU libcはcfmakeraw()少なくともGNUとは異なりますstty raw。たとえば、echoまたは。iuclcixoff

関連情報