我正在尝试将通过 netcat 连接接收到的数据接收到脚本,该脚本将通过 curl post 命令将每一行发送到另一台服务器。
这就是我所在的地方。
这有效:nc -lk 9272 > test.log
收到的每一行都按预期在日志中
这不起作用:
nc -lk 9272 | ./senddata.sh
期望它将行发送到此脚本:
#! /bin/bash
echo "Received Line!"
line=$1
cart=${line:0:7}
type=${line:7:4}
title=${line:14:28}
curl -d "cart=$cart&type=$type&title=$title" -X POST http://server/update
这也不./senddata.sh 9272
发送数据.sh
#!/bin/bash
echo "Started listening on port $1 ..."
while read line
do
if [ "$line" == 'exit' ]; then
echo "Received 'exit'"
break
else
echo "Received Line!"
cart=${line:0:7}
type=${line:7:4}
title=${line:14:28}
curl -d "cart=$cart&type=$type&title=$title" -X POST http://server/update
fi
done < <((echo "Welcome.") | nc -kl $1)
echo "Good bye"
最终目标是接收数据,然后通过帖子将其发送到我的应用程序。
while
尝试将第二个脚本与第一个选项一起使用(但在循环结束时删除重定向)。这是我刚刚测试的示例:
在您的第一个脚本中,您通过管道接收标准输入 (stdin) 上的数据。但是,您尝试使用
$1
(指传递给脚本的第一个命令行参数)来阅读它。