答え1
Bashは端末を「raw」モードに変更しました。これは、タイプライター文字が何らかの方法で処理されないことを意味します。 Enterキーは改行(\ n)ではなくキャリッジリターン(\ r)を生成するため、変換は発生しません。
答え2
生のそして料理スキーマは説明的な用語です。 stty raw
bashとは異なる設定を使用してください。
端末初期化のためのBash端末設定の準備(readlineライブラリの内部関数)、エコーなしで一度に1文字ずつ読み取れるように端末モードを設定します。
tiop->c_lflag &= ~(ICANON | ECHO);
ただし、キャリッジリターン変換は次にリセットされます。関数の他の部分:
/* Make sure we differentiate between CR and NL on input. */
tiop->c_iflag &= ~(ICRNL | INLCR);
prepare_terminal_settings
比較すればコアツールstty
、後者は少ない操作を行います(いくつかのポイントがありますが、bashINLCR
もリセットされます)。
else if (STREQ (情報->名前、"生") || STREQ (情報->名前、"調理済み")) { if((情報 - >名前[0] == 'r'&&リバース) || (情報->名前[0] == 'c' && ! 駅)) { /*クッキングモード。 */ モード - > c_iflag | = IGNPAR IXON | モード-> c_oflag |= OPOST; モード - > c_lflag | = ISIG | Ikanon; #VMIN == VEOFの場合 モード - > c_cc [VEOF] = CEOF; #もし備えて #VTIME == VEOLの場合 モード - > c_cc [VEOL] = CEOL; #もし備えて } その他 { /* ソースモード。 */ モード - > c_iflag = 0; モード-> c_oflag &= ~OPOST; モード-> c_lflag &= ~(ISIG | ICANON #ifdef XCASE |XCASE #もし備えて ); モード - > c_cc [VMIN] = 1; モード - > c_cc [VTIME] = 0; } }
POSIX とstty raw
:
生の入出力を有効(無効)にします。生モードは次の設定と同じでなければなりません。
stty cs8 erase ^- kill ^- intr ^- \
quit ^- eof ^- eol ^- -post -inpck
-post
興味深いことに、(およびで説明したように-inpck
)入力時にキャリッジリターン変換の問題を解決できません。
条件のため生のそして料理(POSIXまたはcoreutils stty)はbashの機能と一致しません。実際の機能に対応するPOSIX termios機能に言及することをお勧めします。icrnl
(キャリッジリターンと改行翻訳入力)。