インタラクティブに入力されたバックスペースはいつ入力に渡されますか?

インタラクティブに入力されたバックスペースはいつ入力に渡されますか?

catリダイレクトを介してクイックテストファイルを生成するとき(サンプル入力を使用するなど)、システムごとに異なる動作が表示されることを確認しました。

私が言っていることを理解するには、次の手順に従ってください。

ランニングcat > testfile

と入力helliし、バックスペースを押してから、と入力しますo

エンターキーを押してください。

入力を終了するには、Ctrl-Dと入力してください。

ランニングod -a testfile

Macなどの一部のシステムでは、次のことができます。

0000000    h   e   l   l   o  nl                                        
0000006

WindowsでMobaXtermを介してログインしたRHEL 5.7ホストなどの他のシステムでは、次のことができます。

0000000    h   e   l   l   i  bs   o  nl                                        
0000010

この違いを生み出すコードはどこにありますか?たとえば、上記の例ではMobaXtermまたはRHEL 5システムを疑う必要がありますか?それとも、キーボードとファイルシステムの間にどのレイヤがありますか?


これは実際の質問よりも好奇心に近い質問です。明らかに、テキストエディタを使用してバックスペース文字なしでファイルを生成できましたが、過去にこれが間違っていました。一度はカジュアルなデモ/トレーニング中にファイルを生成するときにそのような問題があると述べましたがcat、バックスペース文字は文字通り処理され、最終的にそのような効果がない場合にのみエラーを表示しました。学生Macで。 だから気になりますね。

ベストアンサー1

これは、a)BackSpaceキー(^H/BSまたは^?/ DEL)を押したときに端末エミュレータが送信する文字とb)ttyドライバが使用する文字(VERASE後者を変更するには - を参照して使用)によって異なります。stty(1)stty erase ^H

ターミナルエミュレータが送信中である^Hがttyが特殊文字として認識されない場合、BackSpaceキーを押すと画面の最後の文字が視覚的に「削除」されますが、[1]文字はそのまま(文字とともに)送信されます。 tty() から読み取るプロセスにcat

行編集機能を備えたエディタおよびインタラクティブプログラムは、ttyをrawモードに設定し、特殊文字自体を処理し、等しくないものとして^H扱うことができます。 ;-)^?cat

echoctl stty[1]これは設定によって異なります。設定されている場合、端末は形式"^"+chr(char^0x40)^HforBS = 8など)で制御文字をエコーし​​ます。

おすすめ記事