Por que o bash 'read' sai com status 1?

0

De uma resposta a "O script Bash não vê SIGHUP?" Eu tenho o seguinte no meu script:

while true; do read; done

E, geralmente, isso funciona bem. No entanto, quando executado a partir de (tl; dr) ... outra coisa, read sai com o código de status 1.

Por quê? E como posso lidar com isso e restaurar o comportamento desejado (disparando corretamente o EXIT trap)?

(A "outra coisa" é o GNU make executando Erlang's ct_run , que usa erlexec para executar o script )

    
por Roger Lipscombe 20.06.2018 / 11:41

1 resposta

0

A documentação read na página bash man diz

The exit status is zero, unless end-of-file is encountered, read times out (in which case the status is greater than 128), a variable assignment error (such as assigning to a readonly variable) occurs, or an invalid file descriptor is supplied as the argument to -u.

No seu caso, suspeito que a entrada padrão esteja chegando ao fim do arquivo.

Como você está tentando esperar indefinidamente enquanto ainda permite C , talvez o seguinte funcione melhor:

while sleep 1; do :; done

Isso evita surpresas relacionadas ao manuseio de E / S e garante uma reação oportuna aos sinais.

    
por 20.06.2018 / 11:48

Tags