Curl Complex С Bash

Маленькое примечание. Я удалил http://из каждой ссылки, потому что stackoverflow не позволяет мне публиковать его оригинальным способом. Я написал script, которые обращаются к веб-странице, чтобы поймать URL-адрес и загрузить его. Один из URL-адресов делает работу curl stop и все URL-адреса в списке одинаковыми. script работает следующим образом: -

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

Значение FILE_URL VALUE

URL/files/PartOne - Booke (Coll).pdf
webprod25.megashares.com/index.php?d01=3109985&lccdl=9e8e091ef33dd103&d01go=1&fln=/adobe reader exe.rar

И SO One для других

Когда 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

Цитата отмечает, что завиток положил ее сам, я попытался сделать некоторые обходные пути, такие как экранирование, но не работает.

Ответ 1

Основная проблема заключается в том, что вы используете расширение $() для чего-то похожего на многострочное значение. Вы должны попробовать выполнить итерацию по каждой строке.

Другая проблема выглядит как неправильное цитирование URL-адресов, содержащих пробелы. Там одиночная тире (-) в "An-Beat - Mentally Insine"

О, еще одна проблема: часть sed, чтобы поймать содержимое href= "...", работает только в том случае, если на линии есть только один href. Если есть два или более, ваш \(.*\) будет соответствовать всем остальным до последнего href. Вы должны использовать что-то вроде href="\([^"]*\)", сопоставляя "любое количество не-двойных комментариев, за которым следует двойной запрос".

Ответ 2

Введите ваши переменные как:

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

В противном случае произойдет расширение оболочки. Опция "ошибка -: неизвестна" приходит из финальной части:

An-Beat - Mentally Insine

Поскольку вы не применяли к нему кавычки, он анализировался как аргументы, которые вы можете четко видеть в выделенном синтаксисом коде.