我正在尝试编写一个 bash 脚本,以便更轻松地用于rtmpdump
下载 Flash 讲座视频。除了使用 cURL 从 XML 页面获取必要的 mp4 URL 之外,我已经完成了几乎所有其他工作。
当我在终端中运行以下命令时,我得到了我想要的:
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
默认情况下是制表符、空格符和换行符。
请参阅 shell 手册中的“字拆分”或“字段拆分”。