端末をrawモードに設定すると、予期しないインデント動作が発生します。これはなぜですか?


27

私が読んだ内容に基づいて、端末がrawモードの場合、文字は端末ドライバーによって処理されず、そのまま送信されます。

コマンドを使用して端末をrawモードに設定しましたが、stty rawスペースがなくなるまで毎回出力が右にインデントされることに気付きました。これは私が意味するものです:

ここに画像の説明を入力してください

なぜこの動作が起こっているのですか?!

回答:


45

stty設定の1つ(onlcr)は、改行(実際にはASCIIの改行)を復帰と改行に変換するように端末ドライバーに指示します

Unixライクなシステムは、行末に改行を書き込むだけで、ターミナルドライバに正しいことをさせます改行を復帰と改行に変換します)。

キャリッジリターンは「左に移動」し、改行は「下に移動」します。

端末をrawモードに設定すると、改行はキャリッジリターンとラインフィードに変換されなくなります。キャリッジリターンがない場合、その階段効果が得られます。


そして詳細なビューについては、@stéphane-chazelasの本当に良い投稿を見ることができます:unix.stackexchange.com/questions/151916/…では、端末変換(およびその副作用)に関する多くの興味深い事柄を示しています。簡単に言うと、「ssh -t」のみが対話型コマンドを使用しますが、スクリプトでは、コマンドが生成したものを正確に取得する場合はsshのみを使用します(例:sshの片側で作成され、読み取り/書き込みが行われたtarファイル反対側:「-t」を追加しないでください。そうしないと、バイナリが台無しになります(...しますか?)
オリビエデュラック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.