
Então, eu estava jogando Zork 1 e fui copiar um texto para mostrar a um amigo meu, mas acidentalmente esqueci de segurar a tecla shift ao pressionar CTRL+ C. Isso interrompeu o comando e perdi meus dados do Zork...
Existe algum tipo de dica "útil" que eu possa usar para evitar a interrupção do comando ao pressionar as teclas CTRL+ C?
Observe que o Zork é executado dentro do terminal. É um jogo baseado em terminal no qual você dá comandos para realizar diferentes ações.
Responder1
CTRL+ Cenvia um sinal de interrupção ( SIGINT
, que é o sinal número 2) para o trabalho em primeiro plano. Você pode desativar isso "capturando" o sinal usando o trap '' 2
comando antes de iniciar o Zork.
Reative CTRL+ C(untrap SIGINT
) com trap 2
.
Dica: você poderia adicionar algo assim ao seu ~/.bashrc
:
alias zork="(trap '' 2 && cd ~/path/to/zork/ && frotz ZORK1.DAT)"
Desta forma você nunca esquecerá de desabilitar e reativar o sinal e é mais fácil iniciar o jogo apenas digitando zork
no terminal.
Observação: você pode usar o nome do sinal em vez do número se for mais conveniente para você, ou seja, trap '' sigint
ou trap '' int
. Estou acostumado a usar números, por exemplo, in kill -9
e tal.
Responder2
A combinação de teclas Ctrl+ Cenvia o caractere ^C
(valor de byte 3). Isso faz com que o terminal envie oSIGINTsinal para o programa em execução em primeiro plano¹. A ação convencional para este sinal é interromper o comando atual: programas projetados para processar comandos sucessivos voltam para seu prompt de nível superior, enquanto programas projetados como um único comando em lote ou uma interação contínua saem. Evidentemente o programa que você está usando foi projetado de acordo com o segundo modelo.
Esta chave de envio de sinal é um recurso da interface geral do terminal no kernel, compartilhada por todos os emuladores de terminal e terminais físicos reais. Você pode configurar qual tecla envia este sinal, bem como outras chaves (principalmente CtrlZenviandoSIGSTOPsuspender o programa em primeiro plano) com ostty
comando. Para mudar a chave de SIGINT para Ctrl+ _(no terminal atual):
stty intr '^_'
Para desativá-lo completamente:
stty intr ''
Para redefinir todas as configurações para o padrão:
stty sane
A chave não pode ser uma combinação arbitrária de teclas, deve ser um valor de byte único. A stty
configuração pode ser substituída por programas – alguns programas (especialmente programas em modo de texto em tela cheia) fazem seu próprio processamento de atalhos de teclado.
¹ Mais precisamente, para todos os processos doprimeiro plano grupo de processospara o qual o terminal é oterminal de controle.