Trap “break” não funciona enquanto o comando read está sendo chamado

1

Eu tenho este jogo da forca para um projeto da escola, e atualmente estou tentando substituir o comando ctrl-c exit por um intervalo de loop while, para que o usuário volte do jogo real para o menu de seleção de categorias.

O código que estou usando atualmente é:

trap "break" SIGINT

e dentro do loop while:

read CHAR

Tudo funciona bem quando um texto é impresso no loop e também quando o comando sleep está sendo executado, mas quando o algoritmo está no comando read, pressionar ctrl-c apenas insere "^ C" no console.

    
por Marcos Rios 03.04.2018 / 02:58

1 resposta

3

If bash is waiting for a command to complete and receives a signal for which a trap has been set, the trap will not be executed until the command completes.

Essa é a razão pela qual o read não é interrompido.

O ^C não é impresso pelo shell, mas pelo terminal, devido à configuração echoctl . Se você executar stty -echoctl , ele não aparecerá.

    
por 03.04.2018 / 03:39