Impedir que o comando pare ao pressionar CTRL+C

Impedir que o comando pare ao pressionar CTRL+C

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 '' 2comando 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 zorkno terminal.

Observação: você pode usar o nome do sinal em vez do número se for mais conveniente para você, ou seja, trap '' sigintou trap '' int. Estou acostumado a usar números, por exemplo, in kill -9e 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 osttycomando. 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 sttyconfiguraçã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.

informação relacionada