我试图使用以下脚本来创建一个简单的 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"
有谁知道为什么这不能正常工作?第一次执行时,它会在终端上打印“hi”,这是我所期望的。然后,我希望 netcat 在指定的端口上等待,准备生成该脚本的新副本,其中 STDOUT 与网络套接字相关联(因为 -e 标志)。因此,对指定端口的 HTTP GET 请求将收到文本“hi”。
实际发生的情况是,每个 GET 请求都会导致产生一个新的 netcat 进程,一次一个(我期望的),但是在我杀死最新的 netcat 进程之前,没有一个 GET 请求完成。那时,我发出的第一个 GET 请求以“hi”响应,所有其他请求都以失败的连接尝试返回。我怀疑这与我对 STDOUT 重定向细节的困惑有关,但我的理解是,每次有人连接时,这个脚本只会产生一个新版本,脚本的 STDIN/OUT 应该是网络套接字因为 -e netcat 标志。