Estou tentando levar os dados que recebo por uma conexão netcat para um script que enviará cada linha para outro servidor por meio de um comando curl post.
Aqui é onde estou.
Isso funciona:nc -lk 9272 > test.log
Cada linha recebida está no log conforme o esperado
Isso não funciona:
nc -lk 9272 | ./senddata.sh
Espere que ele envie as linhas para este script:
#! /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
Nem isso./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"
O objetivo final é receber os dados e enviá-los para o meu aplicativo por meio de uma postagem.
Tente usar seu segundo script com a primeira opção (mas remova o redirecionamento no final do
while
loop).Aqui está uma amostra que acabei de testar:
Em seu primeiro script, você estava recebendo dados na entrada padrão (stdin), por meio de um pipe. No entanto, você estava tentando lê-lo usando
$1
(que se refere ao primeiro argumento de linha de comando passado para o script).