web-dev-qa-db-ja.com

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

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

キーを押したときにコマンドが停止しないようにするために使用できる「役に立つ」ヒントがありますか? CTRL+C

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

27
user288187

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

この信号送信キーは、カーネル内の一般的な端末インターフェイスの機能であり、すべての端末エミュレーターと実際の物理端末によって共有されます。どのキーがこの信号を送信するか、他のキーを設定できます(最も顕著なのは CtrlZ stty コマンドで SIGSTOP を送信して、フォアグラウンドプログラムを一時停止します。 SIGINTのキーをに切り替えるには Ctrl+_ (現在の端末で):

stty intr '^_'

完全に無効にするには:

stty intr ''

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

stty sane

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

¹ より正確にフォアグラウンドプロセスグループ のすべてのプロセスに対して、端末が 制御端末 です。

29
Gilles

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

再有効化 CTRL + C (SIGINT)をtrap 2でアントラップします。

ヒント~/.bashrcに次のようなものを追加できます。

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

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

trap '' sigintまたはtrap '' intなど、より便利な場合は、番号の代わりに信号名を使用できます。私は数字を使うことに慣れています。 kill -9などで。

33
kraxor