LinuxForum.Fans
Тема

SH скрипт

Автор: Sergio_maroni 10 сообщений 3003 просмотров
#228935

Всем привет!
Возникла такая проблема:
У меня есть медиа плеер iconbit на нем крутится какая то сборка линкуса, он умеет показывать фильмы, качать торренты и тп.
Я на нем хочу настроить автоматическое скачивание торрентов и обложек фильмов с рутрекера и тп...
Вся процедура поделена на этапы:
1) я кидаю в файл ID фильма
2) скрипт по ID выкачивает торрент файл и обложку
3) transmission подхватывает торрент файл, после завершения скрипт создает папку и кладет фильм и обложку вместе.
Собственно проблема в следующем у меня получается с помощью curl, grep , sed , wget выдрнуть картинку и сам торрент. но не получается объеденить все это в один скрипт. То есть если я напишу такую команду:

text
curl --trace-ascii - -d "" --cookie /tmp/hdd/volumes/HDD1/cookies.txt -c /tmp/hdd/volumes/HDD1/cookies.txt -A "Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.2.15) Ubuntu/10.10 (maverick) Firefox/3.6.15" http://rutracker.org/forum/viewtopic.php?t=$1 | grep -i 'postImg postImgAligned img-right' | sed -n 's/.*title="\([^"]*\)".*>/\1/p' > /tmp/hdd/volumes/HDD1/URL.url && wget -O /tmp/hdd/volumes/HDD1/cover.png -i /tmp/hdd/volumes/HDD1/URL.url

то я получу нужную мне картинку по ID ($1)
а если эту :

text
curl --trace-ascii - -d "" --cookie /tmp/hdd/volumes/HDD1/cookies.txt -c /tmp/hdd/volumes/HDD1/cookies.txt -A "Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.2.15) Ubuntu/10.10 (maverick) Firefox/3.6.15"  -e http://rutracker.org/forum/viewtopic.php?t=$1 -o /tmp/hdd/volumes/HDD1/file.torrent http://dl.rutracker.org/forum/dl.php?t=$1

то получу торрент файл. Но все это перестает работать если я эти комманды вставлю в один файл. Делаю так:

text

#!/bin/sh
curl --trace-ascii - -d "" --cookie /tmp/hdd/volumes/HDD1/cookies.txt -c /tmp/hdd/volumes/HDD1/cookies.txt -A "Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.2.15) Ubuntu/10.10 (maverick) Firefox/3.6.15" http://rutracker.org/forum/viewtopic.php?t=$1 | grep -i 'postImg postImgAligned img-right' | sed -n 's/.*title="\([^"]*\)".*>/\1/p' > /tmp/hdd/volumes/HDD1/test2.url && wget -O /tmp/hdd/volumes/HDD1/cover.png -i /tmp/hdd/volumes/HDD1/test2.url

curl --trace-ascii - -d "" --cookie /tmp/hdd/volumes/HDD1/cookies.txt -c /tmp/hdd/volumes/HDD1/cookies.txt -A "Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.2.15) Ubuntu/10.10 (maverick) Firefox/3.6.15" -e http://rutracker.org/forum/viewtopic.php?t=$1 -o /tmp/hdd/volumes/HDD1/file.torrent http://dl.rutracker.org/forum/dl.php?t=$1

далее chmod +x script.file
после этого пытаюсь запустить с помощью команды ./script.file 89456 на что мне система отвечает

text

-sh: ./script.file: not found

пробую запустить его таким образом : sh script.file 89564
все вроде хорошо работает , правда вторая команда не отрабатывает, говорит Bad Request. Хотя если те же строки копировать напрямую в консоль то все работает ...
Я уже мозг сломал, не могу понять в чем дело. ведь ничего не меняю, просто пытаюсь объеденить две команды чтоб выполнялись вместе. Насколько понимаю ошибка где то в "синтаксисе" но вот где ? Буду благодарен за любую помощь

#228943
Sergio_maroni написал:
далее chmod +x script.file
после этого пытаюсь запустить с помощью команды ./script.file 89456 на что мне система отвечает

или всё это происходит на непонятном разделе, не поддерживающем изменение атрибутов, или раздел смонтирован с noexec. см. mount

Sergio_maroni написал:
Я уже мозг сломал, не могу понять в чем дело. ведь ничего не меняю, просто пытаюсь объеденить две команды чтоб выполнялись вместе. Насколько понимаю ошибка где то в "синтаксисе" но вот где ?

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

#228973
Fat-Zer написал:

или всё это происходит на непонятном разделе, не поддерживающем изменение атрибутов, или раздел смонтирован с noexec. см. mount

выполнить mount смогу только вечером.

Fat-Zer написал:

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

а что значит записать по человечески ?. с удовольствием сделаю )

#228979

вот так намного нагляднее, согласитесь...

text

#!/bin/sh

COOKIE="/tmp/hdd/volumes/HDD1/cookies.txt" AGENT="Mozilla/5.0 (X11; U; Linux x86_64; ru; rv:1.9.2.15) Ubuntu/10.10 (maverick) Firefox/3.6.15"

ID=$1 URL="http://rutracker.org/forum/viewtopic.php?t=$ID" COVER_FILE="/tmp/hdd/volumes/HDD1/cover_$ID.png" TORRENT_FILE="/tmp/hdd/volumes/HDD1/$ID.torrent"

COVER_URL=$(curl --trace-ascii - -d "" --cookie "$COOKIE" -c "$COOKIE" -A "$AGENT" "$URL" | grep -i 'postImg postImgAligned img-right' | sed -n 's/.*title="\([^"]*\)".*>/\1/p') wget -O $COVER_FILE $COVER_URL

TORRENT_URL="http://dl.rutracker.org/forum/dl.php?t=$ID" curl --trace-ascii - -d "" --cookie "$COOKIE" -c "$COOKIE" -A "$AGENT" -e "$URL" -o "$TORRENT_FILE" $TORRENT_URL

чтобы отладить скрипт можно запускать его, как bash -x <скрипт>

ЗЫ:мог где-то напортачить, т.к. привык к bash скриптам... у обычного шела язык победнее...
ЗЗЫ: как вы этот скрипт на коробочку перенесли и получили на ней шел?

#228980

Так я тоже пробовал делать но у меня опять таки не работало..

Почему то параметры не передавались. Грешу на то что в коробке стоит какой то "свой линукс" например в команде grep нету парaметра -o который позволяет выводить только найденный regexp.. поэтому пришлось использовать sed. Так же нету bash а только sh.

На коробку попадаю по telnet, одна из левых прошивок. Скрипты закидываю через ftp.

Сегодня вечером обязательно попробую ваш вариант и вышлю на что он ругается. Так же покажу вывод команды mount.

#229087

Вот блин !
Ваш скрипт работает!!
запускаю его так:
sh script 4456456

и все работает !!

видать руки у меня крюки :) буду медитировать на ваш скрипт и пытаться понять где у меня проблема.

кстати вот вывод mount:

text
/dev/root on / type squashfs (ro)
none on /dev type devfs (rw)
none on /proc type proc (rw,nodiratime)
devpts on /dev/pts type devpts (rw)
none on /sys type sysfs (rw)
none on /tmp type ramfs (rw)
/dev/mtdblock/2 on /usr/local/etc type yaffs2 (rw,noatime)
/dev/rd/0 on /mnt/rd type vfat (rw,nodiratime,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1)
/dev/scsi/host0/bus0/target0/lun0/part1 on /tmp/hdd/volumes/HDD1 type ufsd (rw,nodiratime,nls=utf8,uid=0,gid=0,fmask=0,dmask=0,sparse,force)
/dev/scsi/host0/bus0/target0/lun0/part3 on /tmp/hdd/root type ext3 (rw)

Спасибо за помощь !

#229189

а могло ли быть такое что у меня эти скрипты не работали из за того что я писал их в виндовом блокноте а потом копировал через ftp на эту коробку ?
Ведь принципиальных отличий как я понимаю нету в написании скрипта. Просто у вас все разнесено по параметрам и сделано красиво )

#229205
Sergio_maroni написал:
а могло ли быть такое что у меня эти скрипты не работали из за того что я писал их в виндовом блокноте а потом копировал через ftp на эту коробку ?

Могло. Перевод строки в Windows и Linux отличается.
P.S. Как исправить — http://linuxforum.ru/viewtopic.php?pid=246435#p246435

#229347
Sergio_maroni написал:
а могло ли быть такое что у меня эти скрипты не работали из за того что я писал их в виндовом блокноте а потом копировал через ftp на эту коробку ?

да. Кроме различий в переводе строк, ещё необходимо, что-бы посл. строка была пустая.

#229600

ну вот еще один урок прочувствованный на себе :). Спасибо за помощь еще раз.

Войдите или зарегистрируйтесь, чтобы ответить.