Verhindert, dass der Befehl beendet wird, wenn STRG + C gedrückt wird

28

Also habe ich Zork 1 gespielt und einen Text kopiert, um ihn einem Freund zu zeigen, aber ich habe versehentlich vergessen, die Umschalttaste beim Drücken von CTRL+ gedrückt zu halten C. Dadurch wurde der Befehl abgebrochen und ich verlor meine Zork-Daten ...

Gibt es einen "hilfreichen" Hinweis, mit dem ich verhindern kann, dass der Befehl beim Drücken der Tasten CTRL+ gestoppt wird C?

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


quelle
Sie möchten also, dass Strg + C das Beenden aller Anwendungen verhindert? Das könnte jedoch in Zukunft katastrophal sein.
jobin

Antworten:

30

Die Tastenkombination Ctrl+ Csendet das Zeichen ^C(Bytewert 3). Dadurch sendet das Terminal das SIGINT- Signal an das im Vordergrund laufende Programm¹. Die herkömmliche Aktion für dieses Signal besteht darin, den aktuellen Befehl zu unterbrechen: Programme, die aufeinanderfolgende Befehle verarbeiten sollen, kehren zu ihrer Eingabeaufforderung auf oberster Ebene zurück, während Programme, die als einzelner Stapelbefehl oder als kontinuierlicher Interaktions-Exit konzipiert sind. Offensichtlich wurde das von Ihnen verwendete Programm nach dem zweiten Modell entworfen.

Dieser signalgebende Schlüssel ist eine Funktion der allgemeinen Terminalschnittstelle im Kernel, die von allen Terminalemulatoren und realen physischen Terminals gemeinsam genutzt wird. Sie können , welche Taste sendet dieses Signal sowie andere Tasten (insbesondere konfigurieren CtrlZSenden SIGSTOP mit dem das Vordergrundprogramm auszusetzen) sttyBefehl. So stellen Sie die Taste für SIGINT auf Ctrl+ _(im aktuellen Terminal):

stty intr '^_'

So deaktivieren Sie es insgesamt:

stty intr ''

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

stty sane

Der Schlüssel darf keine beliebige Tastenkombination sein, sondern muss ein Einzelbyte-Wert sein. Die sttyEinstellung kann von Programmen überschrieben werden. Einige Programme (insbesondere Programme im Vollbild-Textmodus) führen eine eigene Tastenkombination aus.

¹ Genauer gesagt auf alle Prozesse in der Vordergrundprozessgruppe , für die das Terminal das steuernde Terminal ist .

Gilles 'SO - hör auf böse zu sein'
quelle
32

CTRL+ Csendet ein Interrupt-Signal ( SIGINTdas Signal Nummer 2 ist) 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(Untrap SIGINT) erneut mit trap 2.

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

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

Auf diese Weise werden Sie nie vergessen, das Signal zu deaktivieren und wieder zu aktivieren, und es ist einfacher, das Spiel zu starten, indem Sie einfach zorkdas Terminal eingeben .

Hinweis : Sie können den Signalnamen anstelle der Nummer verwenden, wenn dies für Sie am bequemsten ist, z. B. trap '' sigintoder trap '' int. Ich bin nur daran gewöhnt, die Zahlen zu benutzen, zB in kill -9und so.

kraxor
quelle