
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 '' 2
Befehl „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 zork
im Terminal etwas eingeben.
Notiz: Sie können den Signalnamen anstelle der Nummer verwenden, wenn das für Sie bequemer ist, also trap '' sigint
oder trap '' int
. Ich bin es einfach gewohnt, die Nummern zu verwenden, z. B. in kill -9
und 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 demstty
Befehl. 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 stty
Einstellung 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.