Como capturar um sinal na linha de comando?

6

Eu perguntei isso pergunta . O sinal SIGPIPE é gerado para interromper a execução do comando conforme informado na resposta.

Mas como eu capturo este sinal e termino o comando normalmente? O comando sai com um erro dizendo que é um cano quebrado.

[ERROR] [Errno 32] Broken pipe

é a mensagem de erro exibida

    
por user2555595 05.09.2014 / 12:31

1 resposta

6

AFAIK, a única maneira de "capturar" um sinal como este é usar o comando trap . Que você especificamente configurar uma ação (função ou comando (s)) para executar quando um sinal particular é recebido.

Exemplo

#!/bin/bash


cleanup () {
    ...do cleanup tasks & exit...
}

trap "cleanup" SIGPIPE

### MAIN part of script

Essa abordagem poderia facilmente ser feita em um único marcador versus um script. A "função" que é chamada, cleanup , quando SIGPIPE é vista, poderia facilmente ser também um elaborado "one-liner".

$ trap "cmd1; cmd2; cmd3;" SIGPIPE

Se você olhar para a pergunta original que você vinculou: Encerrando um loop infinito , você notará que essa abordagem também está representada lá.

    
por 05.09.2014 / 12:47