Я пытался использовать следующий сценарий для создания простого CGI-сервера (из http://www.jfranken.de/homepages/johannes/vortraege/netcat_inhalt.en.html). Это больше по технической причине, по которой он не работает, чем по хорошему:
#!/bin/bash
export port=${port:-$1} # inherit $1 as $port
/usr/local/bin/nc -l -p $port -e $0 & # await further connections on this port
echo "hi"
Кто-нибудь знает, почему это не работает должным образом? При первом выполнении он выводит «привет» на терминал, что я ожидаю. Затем я ожидаю, что netcat будет ожидать на указанном порту, готовый создать новую копию этогосценарий с STDOUT, связанным с сетевым сокетом (из-за флага -e). Таким образом, HTTP-запросы GET к указанному порту получат текст «hi».
В действительности каждый запрос GET вызываетновый процесс netcat, который будет порождаться по одному (что я ожидаю), но ни один из запросов GET не будет завершен, пока я не завершу последний процесс netcat. В этот момент первый выданный мной запрос GET отвечает «привет», ивсе остальные возвращаются как неудачные попытки подключения. Я подозреваю, что это как-то связано с моим заблуждением относительно деталей STDOUTперенаправление, но я понимаю, что этот скрипт будет просто создавать новую версию каждый раз, когда кто-то подключается, и STDIN / OUT для скрипта должен быть сетевым сокетом из-за флага -e netcat.