Tenho o seguinte script rodando 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 mesmo de qualquer solicitação ser feita à porta 20000, e então espera e responde corretamente.
O que estou fazendo de errado? Deve ser executado /somescript
apenas quando houver uma solicitação 20.000
Responder1
Nota: a pergunta foi editada (pipeline revertido) depois de escrever isto. Atualizarei se encontrar tempo para fazê-lo.
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 somescript
script terá que esperar e observar a entrada de nc
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 de análise.