Verhindern, dass der Befehl beim Drücken von STRG+C gestoppt wird

Verhindern, dass der Befehl beim Drücken von STRG+C gestoppt wird

Ich habe also Zork 1 gespielt und wollte einen Text kopieren, um ihn einem Freund zu zeigen. Dabei habe ich versehentlich vergessen, die Umschalttaste gedrückt zu halten, als ich CTRL+ gedrückt habe C. Dadurch wurde der Befehl abgebrochen und ich habe meine Zork-Daten verloren ...

Gibt es da draußen irgendeinen „hilfreichen“ Tipp, den ich nutzen kann, um zu verhindern, dass der Befehl abgebrochen wird, wenn ich die Tasten CTRL+ drücke C?

Beachten Sie, dass Zork im Terminal ausgeführt wird. Es ist ein terminalbasiertes Spiel, in dem Sie Befehle eingeben, um verschiedene Aktionen auszuführen.

Antwort1

CTRL+ Csendet ein Interrupt-Signal ( SIGINT, das ist Signal Nummer 2) an den Job im Vordergrund. Sie können dies deaktivieren, indem Sie das Signal mit dem trap '' 2Befehl „abfangen“, bevor Sie Zork starten.

Aktivieren Sie CTRL+ C(Entfallen SIGINT) mit erneut trap 2.

Tipp: Sie könnten Ihrem Folgendes hinzufügen ~/.bashrc:

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

Auf diese Weise vergessen Sie nie, das Signal zu deaktivieren und wieder zu aktivieren, und Sie können das Spiel einfacher starten, indem Sie einfach zorkim Terminal etwas eingeben.

Notiz: Sie können den Signalnamen anstelle der Nummer verwenden, wenn das für Sie bequemer ist, also trap '' sigintoder trap '' int. Ich bin es einfach gewohnt, die Nummern zu verwenden, z. B. in kill -9und so.

Antwort2

Die Tastenkombination Ctrl+ Csendet das Zeichen ^C(Bytewert 3). Dies veranlasst das Terminal, dasZEICHENSignal an das im Vordergrund laufende Programm¹. Die herkömmliche Aktion für dieses Signal besteht darin, den aktuellen Befehl zu unterbrechen: Programme, die darauf ausgelegt sind, aufeinanderfolgende Befehle zu verarbeiten, kehren zu ihrer Eingabeaufforderung auf oberster Ebene zurück, während Programme, die als einzelner Batch-Befehl oder kontinuierliche Interaktion ausgelegt sind, beendet werden. Offensichtlich wurde das von Ihnen verwendete Programm nach dem zweiten Modell entwickelt.

Diese Signalsendetaste ist eine Funktion der allgemeinen Terminalschnittstelle im Kernel, die von allen Terminalemulatoren und realen physischen Terminals gemeinsam genutzt wird. Sie können konfigurieren, welche Taste dieses Signal sendet, sowie andere Tasten (vor allem CtrlZdas SendenSIGSTOPum das Vordergrundprogramm auszusetzen) mit demsttyBefehl. So ändern Sie die Taste für SIGINT auf Ctrl+ _(im aktuellen Terminal):

stty intr '^_'

So deaktivieren Sie es vollständig:

stty intr ''

So setzen Sie alle Einstellungen auf die Standardeinstellungen zurück:

stty sane

Die Taste kann keine beliebige Tastenkombination sein, sondern muss ein Einzelbytewert sein. Die sttyEinstellung kann von Programmen überschrieben werden – einige Programme (insbesondere Programme im Vollbildtextmodus) verarbeiten die Tastenkombinationen selbst.

¹ Etwas präziser, auf alle Prozesse imVordergrund Prozessgruppefür die das Terminal derSteuerterminal.

verwandte Informationen