LINUX.ORG.RU

[Bash]Curl подыхает в вечном цикле


0

1

Доброго всем времени суток. Помогите, пожалуйста, разобраться с проблемой:

#!/bin/bash

prevpattern=""
source ./scrobblerrc

touch ./scrobblerdata

url="http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user="$user"&api_key="$apikey"&limit=1"

while true; do
    curl $url > ./scrobblerdata
    if [[ $(cat ./scrobblerdata | grep nowpl) != '' ]]; then
        artist=`cat ./scrobblerdata | grep -m 1 'artist' | sed -r 's/^[ ]*//;s/<[^>]+>//g'`
        album=`cat ./scrobblerdata | grep -m 1 'album' | sed -r 's/^[ ]*//;s/<[^>]+>//g'`
        title=`cat ./scrobblerdata | grep -m 1 'name' | sed -r 's/^[ ]*//;s/<[^>]+>//g'`
        url=`cat ./scrobblerdata | grep -m 1 'url' | sed -r 's/^[ ]*//;s/<[^>]+>//g'`
    else
        artist=""; album=""; title=""; url="";
    fi
    pattern=$artist$album$title
    if [ $pattern != $prevpattern ]; then
        for i in $( ls $modules ); do
            $modules$i "$artist" "$album" "$title" $url
        done
    fi
    prevpattern=$pattern
    sleep $interval
done

При запуске скрипта curl отрабатывает от силы раз или два:

   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                  Dload  Upload   Total   Spent    Left  Speed
 100  1383  100  1383    0     0   3045      0 --:--:-- --:--:-- --:--:--  3951
   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                  Dload  Upload   Total   Spent    Left  Speed
 100 75707    0 75707    0     0  66982      0 --:--:--  0:00:01 --:--:-- 74149
 curl: try 'curl --help' or 'curl --manual' for more information
 curl: try 'curl --help' or 'curl --manual' for more information

При этом заметно, что время увеличивается. Но если просто натравить curl на url и заставить крутиться в вечном цикле, то всё работает. В чём может быть проблема?

url=`cat ./scrobblerdata | grep -m 1 'url' | sed -r 's/^[ ]*//;s/<[^>]+>//g'`

Здесь, видимо, что-то неправильно присваивается. Проверить не представляется возможным, потому что нет логина с паролем и непонятно, зачем оно нужно(телепатически определить, что находится в $modules не получилось). Может стоит переменную иначе обозвать, чтобы оно не пересекалось с изначальным url'ом?

И да. Stop piping cats!

shell-script ★★★★★ ()

artist=""; album=""; title=""; url="";

И, кстати, вот ещё косяк. Если if не отработал, то переменная url становится пустой, соответственно, curl'у неоткуда тянуть. Определённо надо переменную внутри цикла иначе обозвать.

shell-script ★★★★★ ()
Ответ на: комментарий от shell-script

shell-script

Stop piping cats

+1. В данном случае grep тоже лишнее. Достаточно просто sed.

Конечно причина в отсутствии содержимого $url, тут я согласен.

drBatty ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.