Donc, je jouais du Zork 1 et je suis allé copier du texte pour montrer à un de mes amis, mais j’ai oublié de tenir 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.
La combinaison de touches Ctrl+C envoie le caractère ^C
(valeur d'octet 3). Le terminal envoie alors le signal SIGINT au programme exécuté au premier plan¹. L'action classique pour ce signal est d'interrompre la commande en cours: les programmes conçus pour traiter des commandes successives reviennent à leur invite de niveau supérieur, tandis que les programmes conçus sous la forme d'une commande par lot ou d'une interaction en continu se terminent. Évidemment, 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 générale du terminal 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 touches (notamment CtrlZ envoyer SIGSTOP pour suspendre le programme de premier plan) avec la commande stty
. Pour passer la clé de SIGINT à Ctrl+_ (dans le terminal actuel):
stty intr '^_'
Pour le désactiver complètement:
stty intr ''
Pour rétablir tous les paramètres par défaut:
stty sane
La clé ne peut pas être une combinaison de clés arbitraire, il doit s'agir d'une valeur à un octet. Le paramètre stty
peut être remplacé par des programmes - certains programmes (notamment les programmes en mode texte plein écran) effectuent leur propre traitement des raccourcis clavier.
¹ Plus précisément , à tous les processus du premier plangroupe de processus pour lequel le terminal est le terminal de contrôle .
CTRL + C envoie un signal d'interruption (SIGINT
name__, qui est le signal numéro 2) au travail au premier plan. Vous pouvez le désactiver en "capturant" le signal à l'aide de la commande trap '' 2
avant de démarrer Zork.
Réactiver CTRL + C (désarchivez SIGINT
name__) avec trap 2
.
Astuce: vous pouvez ajouter quelque chose comme ceci à votre ~/.bashrc
:
alias zork="(trap '' 2 && cd ~/path/to/zork/ && frotz ZORK1.DAT)"
De cette façon, vous n'oublierez jamais d'activer ou de réactiver le signal et il est plus facile de démarrer le jeu en tapant simplement zork
dans le terminal.
Note: vous pouvez utiliser le nom du signal au lieu du numéro si cela vous convient mieux, à savoir trap '' sigint
ou trap '' int
. Je suis juste habitué à utiliser les chiffres, par exemple dans kill -9
et autres.