Linux 带Bash的Curl复合体

Linux 带Bash的Curl复合体,linux,bash,curl,Linux,Bash,Curl,小提示:我删除了infront each的http://链接,因为stackoverflow不允许我以原始方式发布它。 我写了一个脚本来访问一个网页,捕捉一个URL并下载它。其中一个URL会使curl停止工作,而列表中的所有URL都是相同的。 该脚本的工作原理如下:- PAGE=$(curl -sL pageurl) FILE_URL=$(echo $PAGE | sed -e 's/^.*<a href=\"\(.*\)\">\(.*\) alt="File" \/><

小提示:我删除了infront each的http://链接,因为stackoverflow不允许我以原始方式发布它。 我写了一个脚本来访问一个网页,捕捉一个URL并下载它。其中一个URL会使curl停止工作,而列表中的所有URL都是相同的。 该脚本的工作原理如下:-

PAGE=$(curl -sL pageurl)
FILE_URL=$(echo $PAGE | sed -e 's/^.*<a href=\"\(.*\)\">\(.*\) alt="File" \/><\/a>.*$/\1/')
其他人也是如此

当curl试图捕获这个url时,它使用bash的调试模式显示以下错误

++ curl -sOL 'webprod37.megashares.com/index.php?d01=3109985&lccdl=9e8e091ef33dd103&d01go=1&fln=/adobe' reader exe.rar fileshare273.depositfiles.com/auth-13023763920cd7ec18a0fdbfa8b62d35-188.165.197.50-43792102-7713641/FS273-7/PageMaker.rar -sOLJg fileshare601.depositfiles.com/auth-1302376689013d421df6c01e7f64c8d2-188.165.197.50-43801594-82379659/FS601-2/Adobe_Flash_Player_v10.3.180.65.2.rar -sOLJg 'webprod37.megashares.com/index.php?d01=de48789&lccdl=9e8e091ef33dd103&d01go=1&fln=/KAZAMIZA.COM.Adobe.Flash' Player-10.3.180.65.Beta-2.JUDGMENT DAY.rar bellatrix.oron.com/spzsttzwytpflwd76j3ne2moukomuhcdxg6llddfztqa2ztd7cplwwp457h3mxuacq3pbxzs/An-Beat - Mentally Insine '(Original' 'Mix).mp3'
curl: option -: is unknown

curl: try 'curl --help' or 'curl --manual' for more information

引号标记了旋度。我尝试了一些变通方法,比如转义url,但没有成功。

引用变量,如:

pageurl='the url'
PAGE=$(curl -sL "$pageurl")
FILE_URL=$(echo "$PAGE" | sed -e 's/^.*<a href=\"\(.*\)\">\(.*\) alt="File" \/><\/a>.*$/\1/')

因为您没有对它应用引号,所以它被解析为参数,您可以在突出显示的语法代码中清楚地看到。

基本问题似乎是您正在使用$()展开来表示我认为类似于多行值的内容。您应该尝试迭代每一行

另一个问题看起来像是不正确引用包含空格的URL。《一个跳动的心灵的内在》中有一个单独的短跑(-)


哦,还有一个问题:sed部分用于捕获href=“…”内容,只有当行上正好有一个href时才起作用。如果有两个或两个以上,则您的
\(.*\)
将匹配到最后一个href之前的所有内容。您应该使用类似于
href=“\([^”]*\)”
,匹配“任意数量的非双引号后跟双引号”。

您是否尝试在引号中写入参数?
pageurl='the url'
PAGE=$(curl -sL "$pageurl")
FILE_URL=$(echo "$PAGE" | sed -e 's/^.*<a href=\"\(.*\)\">\(.*\) alt="File" \/><\/a>.*$/\1/')
An-Beat - Mentally Insine