Bei mir läuft folgendes Skript im Hintergrund:
while true; do
{ file=$(/somescript); echo -ne "HTTP/1.0 200 OK\r\n\r\n"; cat $file; } | nc -l -p 20000
done
Es funktioniert einwandfrei, außer dass es /somescript
einmal sofort ausgeführt wird, bevor überhaupt eine Anforderung an Port 20000 gestellt wird, und dann wartet es und antwortet korrekt.
Was mache ich falsch? Es soll /somescript
nur laufen, wenn eine Anfrage 20000 vorliegt
Antwort1
Hinweis: Die Frage wurde nach dem Schreiben bearbeitet (Pipeline umgekehrt). Ich werde sie aktualisieren, wenn ich Zeit dazu finde.
Jeder Teil einer Pipeline wird gleichzeitig mit den anderen gestartet. Die Pipeline wird nur durch I/O synchronisiert, d. h. ein Prozess wartet darauf, dass ein anderer Prozess in der Pipeline seine Ausgabe liest oder Eingaben bereitstellt.
Ihr somescript
Skript muss warten und die Eingabe nc
einer Anforderung überwachen, bevor es einen Dateinamen ausgibt.
Da ich nicht weiß, was das Skript macht, kann ich nur spekulieren, dass es möglicherweise Probleme beim Parsen gibt.