Donc, je jouais sur du Zork 1 et je suis allé copier du texte pour le montrer à un de mes amis, mais j'ai accidentellement oublié de maintenir la touche Maj enfoncée en appuyant sur CTRL+ C. Cela a arrêté la commande et j'ai perdu mes données Zork ...
Existe-t-il une sorte de conseil "utile" que je peux utiliser pour empêcher l'arrêt de la commande lorsque vous appuyez sur les touches CTRL+ C?
Notez que Zork est exécuté à l'intérieur du terminal. C'est un jeu basé sur un terminal dans lequel vous donnez des commandes pour effectuer différentes actions.
Réponses:
La combinaison de touches Ctrl+ Cenvoie le caractère
^C
(valeur d'octet 3). Cela oblige le terminal à envoyer le signal SIGINT au programme exécuté au premier plan¹. L'action conventionnelle pour ce signal est d'interrompre la commande en cours: les programmes conçus pour traiter les commandes successives reviennent à leur invite de niveau supérieur, tandis que les programmes conçus comme une commande par lot unique ou une sortie d'interaction continue. De toute évidence, le programme que vous utilisez a été conçu selon le deuxième modèle.Cette clé d'envoi de signal est une caractéristique de l'interface de terminal générale dans le noyau, partagée par tous les émulateurs de terminal et les terminaux physiques réels. Vous pouvez configurer la touche qui envoie ce signal, ainsi que d'autres clés (notamment CtrlZenvoyer SIGSTOP pour suspendre le programme de premier plan) avec la
stty
commande. Pour basculer la clé de SIGINT sur Ctrl+ _(dans le terminal actuel):Pour le désactiver complètement:
Pour réinitialiser tous les paramètres par défaut:
La clé ne peut pas être une combinaison de touches arbitraire, elle doit être une valeur à un octet. Le
stty
paramètre peut être remplacé par les programmes - certains programmes (en particulier les programmes en mode texte plein écran) effectuent leur propre traitement de raccourci clavier.¹ Plus précisément , à tous les processus du groupe de processus de premier plan pour lesquels le terminal est le terminal de contrôle .
la source
CTRL+ Cenvoie un signal d'interruption (
SIGINT
, qui est le signal numéro 2) à la tâche au premier plan. Vous pouvez désactiver cela en "piégeant" le signal à l'aide de latrap '' 2
commande avant de démarrer Zork.Réactiver CTRL+ C(untrap
SIGINT
) avectrap 2
.Astuce : vous pouvez ajouter quelque chose comme ceci à votre
~/.bashrc
:De cette façon, vous n'oublierez jamais de désactiver et de réactiver le signal et il est plus facile de démarrer le jeu en tapant simplement
zork
dans le terminal.Remarque : vous pouvez utiliser le nom du signal au lieu du numéro si cela vous convient mieux, c'est
trap '' sigint
-à- dire outrap '' int
. Je suis juste habitué à utiliser les chiffres, par exemple danskill -9
et autres.la source