Назад | Перейти на главную страницу

Отправить данные, полученные 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

senddata.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 петля).

Вот образец, который я только что протестировал:

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 (который относится к первому аргументу командной строки, переданному сценарию).