Ctrl + Cを押したときにコマンドが停止しないようにする


28

だから、私はいくつかのZork 1をプレイしていて、私の友人を見せるためにテキストをコピーしに行ったが、誤ってCTRL+を押したときにShiftキーを押し忘れていたC。これによりコマンドが停止し、Zorkデータが失われました...

私は、コマンドキーを押したキーの停止を防止するために使用することができます彼らのうち「役に立つ」先端のいくつかの並べ替えがありCTRL+はC

Zorkはターミナル内で実行されることに注意してください。これは、さまざまなアクションを実行するコマンドを与える端末ベースのゲームです。


Ctrl + Cですべてのアプリケーションを完全に終了させないようにしたいですか?しかし、それは将来悲惨なことになるかもしれません。
jobin 14

回答:


30

キーの組み合わせCtrl+ Cは、文字^C(バイト値3)を送信します。これにより、端末はフォアグラウンドで実行中のプログラムにSIGINT信号を送信します¹。この信号に対する従来のアクションは、現在のコマンドを中断することです。連続したコマンドを処理するように設計されたプログラムはトップレベルプロンプトに戻り、単一のバッチコマンドまたは連続的な対話出口として設計されたプログラム。明らかに、使用しているプログラムは2番目のモデルに従って設計されています。

この信号送信キーは、カーネル内の一般的な端末インターフェイスの機能であり、すべての端末エミュレーターと実際の物理端末によって共有されます。どのキーがこのシグナルを送信するか、および他のキー(特に、フォアグラウンドプログラムを中断するためにSIGSTOPCtrlZ送信する)をコマンドで構成できます。SIGINTのキーを+ (現在の端末で)に切り替えるには:sttyCtrl_

stty intr '^_'

完全に無効にするには:

stty intr ''

すべての設定をデフォルトにリセットするには:

stty sane

キーは任意のキーの組み合わせにすることはできません。1バイトの値である必要があります。このstty設定はプログラムによって上書きできます。一部のプログラム(特に全画面テキストモードプログラム)は、独自のキーボードショートカット処理を行います。

¹ より正確は、端末が制御端末であるフォアグラウンドプロセスグループ内のすべてのプロセス


32

CTRL+ C割り込み信号(SIGINT、信号番号2)をフォアグラウンドのジョブに送信します。これを無効にするには、trap '' 2Zorkを起動する前にコマンドを使用して信号を「トラップ」します。

CTRL+ C(トラップ解除SIGINT)を再度有効にしtrap 2ます。

ヒント:次のように追加できます~/.bashrc

alias zork="(trap '' 2 && cd ~/path/to/zork/ && frotz ZORK1.DAT)"

これにより、シグナルを無効にしてから再度有効にすることを決して忘れずzork、ターミナルに入力するだけでゲームを開始するのが簡単になります。

:それはあなたのためのより便利だ場合は、代わりに番号の信号名を使用することができ、すなわちtrap '' siginttrap '' int。私は数字を使うことに慣れています。例えば、in kill -9などです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.