Профессионалы могут сделать это Bash + Escape - PullRequest
1 голос
/ 10 апреля 2011

Я провел всю ночь, пытаясь завершить процесс, но все мои попытки заканчивались неудачей.

Я пишу очень простой скрипт, чтобы очистить то, что я пытаюсь сделать, скопируйте его и попробуйте включитьэто вверх.

    #!/bin/bash
set -x
urls='http://bellatrix.oron.com/jrmxp36wf36yew4veg4fp53kmwlogjeecmopy3n2ja5yqkyzekxwqx2pckq6dtd5hb7duvgk/An-Beat - Mentally Insine (Original Mix).mp3'
#urls="http://bellatrix.oron.com/jrmxp36wf36yew4veg4fp53kmwlogjeecmopy3n2ja5yqkyzekxwqx2pckq6dtd5hb7duvgk/An-Beat - Mentally Insine (Original Mix).mp3"


for letsgo in `curl -OLJg  "'${urls}'"` ; do
echo "GOT TRIED OF TRYING"
done

# for letsgo in `curl -OLJg $urls` ; do
#echo "GOT TRIED OF TRYING"
# done

Результат, который я получил после запуска

Первый цикл: -

./ap2.sh
+ urls='http://bellatrix.oron.com/jrmxp36wf36yew4veg4fp53kmwlogjeecmopy3n2ja5yqkyzekxwqx2pckq6dtd5hb7duvgk/An-Beat - Mentally Insine (Original Mix).mp3'
++ curl -OLJg ''\''http://bellatrix.oron.com/jrmxp36wf36yew4veg4fp53kmwlogjeecmopy3n2ja5yqkyzekxwqx2pckq6dtd5hb7duvgk/An-Beat - Mentally Insine (Original Mix).mp3'\'''

curl: (1) Protocol 'http not supported or disabled in libcurl
+ for letsgo in '`curl -OLJg  "'\''${urls}'\''"`'
+ echo 'GOT TRIED OF TRYING'
GOT TRIED OF TRYING

Второй цикл

./ap2.sh
+ urls='http://bellatrix.oron.com/jrmxp36wf36yew4veg4fp53kmwlogjeecmopy3n2ja5yqkyzekxwqx2pckq6dtd5hb7duvgk/An-Beat - Mentally Insine (Original Mix).mp3'
++ curl -OLJg http://bellatrix.oron.com/jrmxp36wf36yew4veg4fp53kmwlogjeecmopy3n2ja5yqkyzekxwqx2pckq6dtd5hb7duvgk/An-Beat - Mentally Insine '(Original' 'Mix).mp3'
curl: option -: is unknown
curl: try 'curl --help' or 'curl --manual' for more information

Проблема в том, что я не знаю, где избежать моего URL-адреса без моего разрешения и заставить вещи, вероятно, не работать.

Обновление

Я избавился от этого с помощью

for letsgo in `curl -OLJg  "${urls}"` ; do
echo "Working Fine But We Still Have Problem When We Are Using More Than 1 URL"
done

Проблема, когда в скрипте есть более одного URL-адреса, каждый из которых должен быть в кавычках (только для моего случая), чтобы, вероятно, работал локон.Я могу сделать это вручную в консоли Linux без каких-либо проблем, но когда дело доходит до использования BASH-скрипта, результат этого скрипта будет

#!/bin/bash
set -x
urls="'http://bellatrix.oron.com/jrmxp36wf36yew4veg4fp53kmwlogjeecmopy3n2ja5yqkyzekxwqx2pckq6dtd5hb7duvgk/An-Beat - Mentally Insine (Original Mix).mp3' -OLJg 'http://webprod15.megashares.com/index.php?d01=3109985&lccdl=9e8e091ef33dd103&d01go=1' -OLJg "



for letsgo in `curl -OLJg "${urls}"` ; do
    echo "Working Fine But We Still Have Problem When We Are Using More Than 1 URL"
done

Результаты: -

+ urls=''\''http://bellatrix.oron.com/jrmxp36wf36yew4veg4fp53kmwlogjeecmopy3n2ja5yqkyzekxwqx2pckq6dtd5hb7duvgk/An-Beat - Mentally Insine (Original Mix).mp3'\'' -OLJg '\''http://webprod15.megashares.com/index.php?d01=3109985&lccdl=9e8e091ef33dd103&d01go=1'\'' '
++ curl -OLJg ''\''http://bellatrix.oron.com/jrmxp36wf36yew4veg4fp53kmwlogjeecmopy3n2ja5yqkyzekxwqx2pckq6dtd5hb7duvgk/An-Beat - Mentally Insine (Original Mix).mp3'\'' -OLJg '\''http://webprod15.megashares.com/index.php?d01=3109985&lccdl=9e8e091ef33dd103&d01go=1'\'' '

curl: (1) Protocol 'http not supported or disabled in libcurl
+ for letsgo in '`curl -OLJg "${urls}"`'
+ echo 'Working Fine But We Still Have Problem When We Are Using More Than 1 URL'
Working Fine But We Still Have Problem When We Are Using More Than 1 URL

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

curl -OLJg 'http://bellatrix.oron.com/jrmxp36wf36yew4veg4fp53kmwlogjeecmopy3n2ja5yqkyzekxwqx2pckq6dtd5hb7duvgk/An-Beat - Mentally Insine (Original Mix).mp3' -OLJg 'http://webprod15.megashares.com/index.php?d01=3109985&lccdl=9e8e091ef33dd103&d01go=1' -OLJ

Ответы [ 6 ]

2 голосов
/ 10 апреля 2011

Вы должны удалить одинарные кавычки в аргументе curl - так, как вы его написали, они становятся частью URL.

1 голос
/ 10 апреля 2011

Вы когда-нибудь видели пробел в адресной строке браузера? Они должны быть преобразованы в % A20 (исправлено комментарием Лукаса, спасибо)% 20 и, возможно, аналогичные специальные символы тоже.

wellurl=$(echo $urls | sed 's/ /%20/g')

Я не знаю, curl - это что-то похожее на wget, не так ли?

wget -np $wellurl
2011-04-10 16:55:28 (17,2 MB/s) - »An-Beat - Mentally Insine (Original Mix).mp3« gespeichert [191]

работал для меня.

Обновление:

Чтобы получить несколько URL-адресов из скрипта, используйте массив:

#!/bin/bash
#
declare -a urls
urls=('http://bellatrix.oron.com/jrmxp36wf36yew4veg4fp53kmwlogjeecmopy3n2ja5yqkyzekxwqx2pckq6dtd5hb7duvgk/An-Beat - Mentally Insine (Original Mix).mp3' 'http://webprod15.megashares.com/index.php?d01=3109985&lccdl=9e8e091ef33dd103&d01go=1')

for i in $(seq 0 ${#urls[@]} )
do 
    wellurl=$(echo ${urls[i]} | sed 's/ /%20/g')
    # echo "$wellurl"
    curl -OLJg "$wellurl"
done
  • $ {# urls [@]} возвращает количество элементов в массиве
  • не помещать опции в массив
  • используйте меньшие URL в следующих вопросах, пожалуйста:)
0 голосов
/ 25 апреля 2011

curl -K тебе не помогает?(вы можете поместить URL-адреса в файл в точности так, как вы их видели на панели навигации) http://curl.haxx.se/docs/manpage.html

0 голосов
/ 10 апреля 2011

Использование переменной urls предполагает, что там будет более одного URL.Если это так, вы можете рассмотреть массивы BASH.Кроме того, эхо-сообщение «GOT TIRED OF WAITING» предполагает, что скручивание может завершиться ошибкой.Если это так, вы можете проверить наличие ошибки более явно.

Проверьте и попробуйте выполнить следующее:

set -x
list_of_urls=('http://bellatrix.oron.com/jrmxp36wf36yew4veg4fp53kmwlogjeecmopy3n2ja5yqkyzekxwqx2pckq6dtd5hb7duvgk/An-Beat - Mentally Insine (Original Mix).mp3')

for url in "${list_of_urls[@]}"
do
 curl -s -OLJg  "${url}"
 if [ $? -gt 0 ]; then
   echo "$url is a PROBLEM! (return code: $?)" 
 fi
done

Одна вещь, которую я заметил при запуске этого: сервер "успешно"другими словами, $? равен 0), но curl возвращает файл с именем error.html.Это может быть еще одно условие ошибки, которое вы перехватываете.Удачи!

0 голосов
/ 10 апреля 2011

попробуйте

urls="http://bellatrix.oron.com/jrmxp36wf36yew4veg4fp53kmwlogjeecmopy3n2ja5yqkyzekxwqx2pckq6dtd5hb7duvgk/An-Beat - Mentally Insine (Original Mix).mp3"
curl -OLJg  "${urls}" | while read results
do
 ...
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...