^C
を印刷するのは「Ruby」ではなく、端末からの通常のキーボード入力です。 asd
と入力すると、もと表示されます。ターミナルでは、本当に単なる文字(または複数の文字)なので、すべての「特別な」キー(Ctrl +キー、Alt +キー、F1など)は本当にすべて「特別な」ものではないからです。
あなたのスクリプトを実行し、F1
(私のシステムで^[OP
として番組)のようないくつかのキーを押すことによって自分自身のためにこれを見ることができ、バックスペース(^H
または^?
)など
それはどこ、1960年代のテレタイプからレガシーですすべてのデータは単一のシリアルテキスト接続を介して送信されました。この修正するいくつかの方法があります
:tadmanは、すでに述べたように
が、あなたは、行の先頭にカーソルを置く\r
文字を使用することができます。実際には何も消去しませんが、^C
を別のもので上書きすることができます。 ^C
はではなく、が新しい行に印刷されるため、すべての場合に機能するとは限りません。あなたのputs "\b\bSIGINT"
はおそらくこれのためのより良い解決策です!また、唯一の制御文字(例えば、^C
のエコー防止ctlecho
オプションをサポート(Linuxなど)
いくつかのシステム:
第二の方法は、エコー入力を防止するためにstty
コマンドを使用することです)。
それはカーソル二つの場所を移動しないことを除いて、これは、実際には '\ bは\のbSIGINT'を使用してからの違いはありません'^ C'が押されたときにスクリプトが何かを出力していた場合には必ずしも動作しないかもしれません。 – Carpetsmoker
これはいつもうまくいくわけではない異なるアプローチですが、ほとんどの場合、適切です。 – tadman