У меня в фоновом режиме работает следующий скрипт:
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, а затем ждет и отвечает правильно.
Что я делаю не так? Он должен запускаться /somescript
только при запросе 20000
решение1
Примечание: Вопрос был отредактирован (перенаправление изменено) после написания этого. Я обновлю, если найду время.
Каждая часть конвейера запускается одновременно с другими. Единственное, что синхронизирует конвейер, — это ввод-вывод, т. е. процесс, ожидающий, пока другой процесс в конвейере прочитает его вывод или предоставит ввод.
Вашему somescript
скрипту придется ждать и отслеживать входные данные от nc
запроса, прежде чем выводить имя файла.
Не зная, что делает этот скрипт, я могу только предположить, что у него могут быть какие-то проблемы с синтаксическим анализом.