Tengo el siguiente script ejecutándose en 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 bien, excepto que /somescript
se ejecuta una vez al instante, incluso antes de que se realice cualquier solicitud al puerto 20000, y luego espera y responde correctamente.
¿Qué estoy haciendo mal? Se supone que se ejecuta /somescript
sólo cuando hay una solicitud 20000
Respuesta1
Nota: La pregunta fue editada (canalización invertida) después de escribir esto. Actualizaré si encuentro tiempo para hacerlo.
Cada parte de una tubería se inicia al mismo tiempo que las demás. Lo único que sincroniza la canalización es la E/S, es decir, un proceso que espera a que otro proceso en la canalización lea su salida o proporcione entrada.
Su somescript
secuencia de comandos tendrá que esperar y observar la entrada de nc
una solicitud antes de generar un nombre de archivo.
Sin saber qué hace el script, sólo puedo especular que puede tener algunos problemas con el análisis.