Você poderia, se quisesse ignorar o SIGPIPE no script:
trap "" PIPE
Um script de shell pode perder seus descritores de arquivo padrão e outros se a outra extremidade desaparecer. Uma maneira de isso acontecer é terminar um cliente ssh
usado para iniciar o script:
$ ssh localhost test
^C
Isso inicia um script bash
chamado test
sobre SSH e uma Ctrl C é usada para finalizar o comando ssh
. Isso não termina test
, que continua em execução, mas fecha os descritores de arquivos anexados (por exemplo, entrada / saída / erro padrão).
Se test
tentar usar esses descritores de arquivos fechados, ele terminará com SIGPIPE
. Um simples echo
será suficiente.
Uma das coisas que test
pode ter é uma função log
que usa echo
para gravar mensagens no diário do systemd e também para o erro padrão. Algo parecido com isto:
log() {
echo "$*" | systemd-cat -t test
echo >&2 "$*"
}
O segundo echo
gera um SIGPIPE
após a sessão ssh
ser eliminada ( Ctrl C ). Isso pode ser protegido contra, para que a execução continue sem o echo
ofensivo, colocando o echo
em uma subshell:
( echo >&2 "$*" )
Mas existe uma maneira melhor?
Você poderia, se quisesse ignorar o SIGPIPE no script:
trap "" PIPE
Tags bash shell shell-script