o pipe do netcat está em execução muito cedo?

0

Eu tenho o seguinte script em execução em segundo plano:

while true; do
    { file=$(/somescript); echo -ne "HTTP/1.0 200 OK\r\n\r\n"; cat $file; } | nc -l -p 20000
done

Funciona bem, exceto que /somescript é executado uma vez instantaneamente, antes que qualquer solicitação seja feita para a porta 20000 e, em seguida, ele aguarda e responde corretamente.

O que estou fazendo de errado? Ele deve executar /somescript somente quando houver uma solicitação de 20000

    
por user224371 15.04.2017 / 12:38

1 resposta

1

Nota: A pergunta foi editada (pipeline invertida) depois de escrever isto. Vou atualizar se encontrar tempo para isso.

Cada parte de um pipeline é iniciada simultaneamente com as outras. A única coisa que sincroniza o pipeline é a E / S, ou seja, um processo aguardando outro processo no pipeline para ler sua saída ou fornecer entrada.

Seu script somescript terá que esperar e assistir a entrada de nc para uma solicitação antes de gerar um nome de arquivo.

Não sabendo o que o script faz, só posso especular que pode haver alguns problemas com a análise.

    
por 15.04.2017 / 12:44