我正在尝试将通过 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
发送数据
#!/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"
最终目标是接收数据,然后通过帖子将其发送到我的应用程序。
答案1
尝试使用第一个选项的第二个脚本(但在循环结束时删除重定向while
)。
这是我刚刚测试过的示例:
root@kube-01-01:~# cat test.sh
#!/bin/bash
while read line
do
echo "Received Line!"
echo $line
done
echo "Good bye"
root@kube-01-01:~# nc -l 8090 | ./test.sh
Received Line!
test
Received Line!
hello there
Good bye
在您的第一个脚本中,您通过管道在标准输入 (stdin) 上接收数据。但是,您尝试使用$1
(指传递给脚本的第一个命令行参数)读取它。