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' を追加