O script Bash não é terminado com Ctrl + C

3

Meu script não pode ser terminado com a tecla Ctrl + C . É um erro.

Por favor, explique como modificar meu script para torná-lo terminável por Ctrl + C .

#!/bin/bash

while true; do
  paplay /usr/share/sounds/phone.wav
done
    
por porton 12.03.2016 / 16:49

2 respostas

4

Se você pegar o SIGINT no shell pai e sair do shell, ele também interromperá a paplay:

trap exit SIGINT;
while true; do paplay  /usr/share/sounds/phone.wav ; done

Parece que paplay bloqueia o sinal INT e afeta que o shell pai não execute seu manipulador padrão.

A instalação de um manipulador no shell pai no qual você redefine o manipulador e reapresenta o sinal provavelmente o resolve de uma maneira melhor:

trap 'trap - SIGINT; kill -SIGINT $$' SIGINT; 
while :; do paplay  /usr/share/sounds/linuxmint-login.wav ; done 

(Com a abordagem exit , o processo do iniciador acha que seu filho saiu voluntariamente, enquanto que, na segunda abordagem, parece que o script foi eliminado com SIGINT , o que era).

    
por 12.03.2016 / 17:07
0

A questão é, na verdade, sobre paplay , que pode estar bloqueando sinais, ou (como sugerido no Arch Wiki ), pode estar simplesmente muito ocupado.

Você pode tornar o script mais fácil, colocando um sleep 1 no loop.

    
por 12.03.2016 / 16:58