bashスクリプトでtsharkが提供するgrep urlを使用する方法は?

bashスクリプトでtsharkが提供するgrep urlを使用する方法は?

tsharkでwhileループでリンクされたURLを使用しようとしています。

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)

ループ内で $line を次のように表示できます。

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

ただし、何らかの理由でffmpegを供給するために同じwhileループ内で同じ「line」変数を使用することはできません。行為

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

結果(すべての引用を正確にコピーして貼り付けました)

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

一方、URL(エコーの出力)をコピーして二重引用符で囲んだ後、端末で同じffmpegコマンドを使用すると正常に動作します。

また、何らかの理由で -xv を使用してスクリプトを実行すると、コマンドが切り捨てられ、「+ffmpeg -i 'http://....」行全体が表示されません。

ベストアンサー1

編集:grepが改行またはキャリッジリターンをキャッチしているようです。ワンタイムコマンドで送信する場合は問題ありませんが、ループでは送信できません。 tr -d '\r' を追加

おすすめ記事