将 netcat 收到的数据发送到脚本

将 netcat 收到的数据发送到脚本

我正在尝试将通过 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(指传递给脚本的第一个命令行参数)读取它。

相关内容