rtmpdump
Flashレッスンビデオをより簡単にダウンロードできるbashスクリプトを作成しようとしています。 XMLページから必要なmp4 URLを取得するためにcURLを使用することを除いて、ほとんどすべてのことを行いました。
端末で次のコマンドを実行すると、目的の結果が得られます。
curl -s http://amps-web.amps.ms.mit.edu/courses/6/6.046/2017spring/L01/MIT-6.046-lec-mit-0000-2017feb09-1103-L01/settings-flash.xml | grep "rtmp:"
生産する:
rtmp://flashsvr1.amps.ms.mit.edu/6.046/mp4:2017spring/MIT-6.046-lec-mit-0000-2017feb09-1103-L01.mp4</url>
(末尾のヘッダについて知っており、私のbashスクリプトで処理されます)
しかし、bashスクリプトで同じコマンドを実行して出力を変数に保存しようとすると、何も得られません。結果を実行しxml=$(curl -s $url)
てエコーすると、ヘッダーはいっぱい(すべてではない)生成され、それ以上は生成されません。
<camera id="2" cameraX="960" cameraY="0" thumbnailX="960" thumbnailY="0" name="CAM2" selectedName="LIVE 2
<camera id="3" cameraX="0" cameraY="540" thumbnailX="0" thumbnailY="540" name="CAM3" selectedName="LIVE 3
<camera id="4" cameraX="960" cameraY="540" thumbnailX="960" thumbnailY="540" name="CAM4" selectedName="LI
<fullscreenOutButtonImageOver>fallback/assets/btn_fullscreenOff_selected.png</fullscreenOutButtonImageOve
<fullscreenOutButtonImageDown>fallback/assets/btn_fullscreenOff_selected.png</fullscreenOutButtonImageDow
<communityRealOutButtonImageNormal>fallback/assets/buttons/community_selected_up.png</communityRealOutBut
<communityRealOutButtonImageOver>fallback/assets/buttons/community_over.png</communityRealOutButtonImageO
<communityRealOutButtonImageDown>fallback/assets/buttons/community_down.png</communityRealOutButtonImageD
<thumbspositionTopButtonImageNormal>fallback/assets/btn_thumbnailPositionTop.png</thumbspositionTopButton
<thumbspositionBottomButtonImageNormal>fallback/assets/btn_thumbnailPositionBottom.png</thumbspositionBot
</settings>ge>fallback/assets/affiche.png</landingImage>>ng</thumbnailActive>Progress>geDown>Down>
何が起こるのか知っている人はいますか?本当に残念です。ありがとうございます!
答え1
データにキャリッジリターンがあります。フィルタリングしてください。
curl ... | tr -d '\r'
また、エコー時に変数を引用します。
$ echo "$xml"
または、より良い方法は次のとおりです。
$ printf '%s\n' "$xml"
引用符は単語の分割を防ぎます。トークン化は、コマンドラインで引用符がないすべての変数に対して発生し、値に基づいてその行を単語に分割することを含みます$IFS
。$IFS
デフォルトはタブ、スペース、改行です。
シェルマニュアルの「単語の分割」または「フィールドの分割」を参照してください。