バックグラウンドで次のスクリプトを実行しています。
while true; do
{ file=$(/somescript); echo -ne "HTTP/1.0 200 OK\r\n\r\n"; cat $file; } | nc -l -p 20000
done
/somescript
ポート 20000 にリクエストが行われる前に 1 回だけ即座に実行され、その後待機して正しく応答する点を除けば、正常に動作します。
/somescript
何が間違っているのでしょうか?リクエスト20000があるときだけ実行されるはずです
答え1
注: この質問は、これを書いた後に編集されました (パイプラインが逆転しました)。時間があれば更新します。
パイプラインの各部分は、他の部分と同時に開始されます。パイプラインを同期させるのは I/O、つまりパイプライン内の別のプロセスが出力を読み取ったり入力を提供したりすることを待機するプロセスのみです。
ファイル名を出力する前に、スクリプトはリクエストからsomescript
の入力を待機して監視する必要があります。nc
スクリプトが何を行うのかわからないので、解析に何らかの問題があるのではないかと推測することしかできません。