Obtém uma saída de jobs em segundo plano por meio da gravação em um arquivo

1

Estou tentando obter a saída de um comando em segundo plano em execução que emiti com

sudo wminput -r -w -c "$controls_config" > "$temp_output" &
exec 3< "$temp_output"

while true; do
    sleep 1
    read <&3 output
    if [[ "$output" = 'Ready' ]]; then
        echo "Controller $wiimote_counter Connected"
        break
    fi
done

mas nada é gravado no arquivo enquanto o script está sendo executado. Só depois de enviar um SIGINT ele escreve qualquer coisa no arquivo (tentei com apenas o arquivo como bem, mas sem sorte).

Existe outra maneira de obter a saída de um trabalho em segundo plano da maneira que eu quero usá-lo? ou seja, continuamente, até que uma certa saída seja alcançada.

    
por Noobay 25.03.2017 / 12:43

1 resposta

1

Graças ao comentário de @ choroba, fui direcionado para o fato de que a saída é armazenada em buffer.

procurando mais eu encontrei este post informando que stdout está em buffer por padrão.
Além disso, olhando para as páginas de manual para wminput não deu solução rápida,
então eu fui procurar uma maneira de forçar um flush do buffer de stdout de jobs para o arquivo - e encontrei o comando stdbuf. stdbuf docs

Qual eu uso como- sudo stdbuf -oL wminput -r -w -c "$controls_config" > "$temp_output" &
onde -o significa stdout
e -L para liberar o buffer em cada nova linha

Obrigado pela dica!

    
por 25.03.2017 / 16:20