我有一个系统可以处理传入的电子邮件,以将它们发送到我工作的黑匣子应用程序。高级脚本由 inittab 维护以始终运行并运行子脚本以使用此命令执行实际工作:
$SCRIPT | nc -l -p $PORT
脚本本身从命名管道读取,在调用之前对数据进行一些解析和处理,echo
通过 netcat 将数据重新洗牌到 $PORT 上连接的进程。
我需要一些方法来处理来自管道远端的传入数据。当我在应用程序中发出关闭连接的请求时,它会发回一个字符串(我可以将其定义为我想要的任何内容)并等待我的脚本关闭管道。我目前正在努力了解如何添加从另一端读取传入数据的功能;验证它是关闭管道的命令,然后退出脚本。
我的脚本(简而言之)如下所示:
while true ; do
email_input="`cat "$pipe"`"
if [[ $email_input =~ .*escape_queue.* ]] ; then
break;
fi
echo "`parse`"
done
我对不得不改变程序流程的可能性持开放态度,我只是无法理解如何能够异步读取传入的数据,因为脚本会一直阻塞,cat $pipe
直到收到要处理的新电子邮件。
如果不清楚,我在 bash 脚本方面处于新手级别,并且总是乐于接受改进建议。
更新 我已将脚本调用更改为
$SCRIPT | nc -l -p $PORT > $nc_data
并在脚本本身内
netcat_response="`cat "$nc_data"`";
if [[ "$netcat_response" =~ "exit" ]] ; then
cat /dev/null > $nc_data
break;
fi
此时,一旦有新消息通过管道传输到 fifo,脚本就会终止。这意味着我将始终丢失 1 条消息,因为它被脚本读取然后脚本终止。脚本仍然会阻塞,cat
直到读取某些内容。在最坏的情况下,这将不得不这样做。