Como usar um URL greped fornecido pelo tshark dentro de um script bash?

1

Estou tentando usar um URL enviado do tshark para um loop while.

while read line ; do 
echo "$line"
ffmpeg -i "$line" -c copy "filename"
done < <(tshark -i tun0 -B 50 -P -V -q -l -Y 'http matches "(?<=\[Full request URI: )(http://mywebsite.com/file.*)(?=\])"' 2>&1 | grep --line-buffered -Po "(?<=\[Full request URI: )(http://mywebsite.com/file.*)(?=\])" | unbuffer -p uniq)

Dentro do loop, consigo ecoar $ line bem; e parece assim:

http://mywebsite.com/file?eid=5345944&fmt=5&app_id=214748364&range=20-30&etsp=1456777145&hmac=1K9nwkA8TOgtOXAsakSfMMVWsuE

Mas, por algum motivo, não consigo usar essa mesma variável "line" para alimentar o ffmpeg, dentro do mesmo loop while. Fazendo

ffmpeg -i "$line" -c copy "filename"

resulta em (todas as citações são copiadas com precisão)

[http @ 0x1ab5ec0] HTTP error 400 Bad Request:
Server returned 400 Bad Request5345932&fmt=5&app_id=214748364&range=20-30&etsp=1456779359&hmac=35B2lA6D0zfR2DmfdPS4ZcilYxg

Por outro lado, copiar o URL (da saída de eco), duplicá-lo e usar o mesmo comando ffmpeg em um terminal funciona perfeitamente.

Além disso, por algum motivo, o comando é truncado ao executar o script com -xv, de tal forma que ele não mostre a linha completa "+ ffmpeg -i 'http: // ...." como deveria .

    
por dédé 29.02.2016 / 21:12

2 respostas

0

Editar: Parece que o grep está capturando uma nova linha ou um retorno de carro, o que é bom quando você o envia como um comando único, mas não está bem no loop. Adicione tr -d '\ r'

    
por 29.02.2016 / 21:18
0

Acontece que o grep (ou tshark?) está capturando um retorno de carro na variável $line , como apontado por Gregg Leventhal. Esse retorno de carro precisa ser retirado.

Substituir $line dentro do loop por $(echo "$line" | tr -d '\r') fez o truque para mim!

    
por 13.04.2016 / 10:26