Уважаемые, нкогда до этого не имел дело с SH, но вот столкнулся с такой задачей:Мне нужно cgi-скрипту передать два параметра (пути).
Я их передал постом, получил на выходе:
f=http/test/site.zip&d=http/testНа данный момент скрипт выглядит так:
#!/bin/sh
echo Content-type: text/plain
echoecho "<b>метод POST</b><br>"
cat
echo "<br>"
set | grep CONTENT_LENGTH/usr/bin/unzip -x ../$CONTENT_LENGTH -d ../http
ессно тут ничего не работает т.к.
CONTENT_LENGTH = f=http/test/site.zip&d=http/test
подскажите как отпарсить данные, чтобы получить:f=http/test/site.zip
d=http/testзаранее спасибо
>ессно тут ничего не работает т.к.
>CONTENT_LENGTH = f=http/test/site.zip&d=http/test
>
>
>подскажите как отпарсить данные, чтобы получить:
>
>f=http/test/site.zip
>d=http/test
>
>заранее спасибоможно так:
eval ${CONTENT_LENGTH//&/ }
>можно так:
>eval ${CONTENT_LENGTH//&/ }
а можно поподробнее? я не очень разбираюсь в SH.строку добавил, но что делать дальше и как разделить на переменные и пользоваться ими вообще не пойму.
Или доку какую.
>
>>можно так:
>>eval ${CONTENT_LENGTH//&/ }
>
>
>а можно поподробнее? я не очень разбираюсь в SH.
>
>строку добавил, но что делать дальше и как разделить на переменные и
>пользоваться ими вообще не пойму.${CONTENT_LENGTH//&/ } - заменяет '&' на пробел -> получается
"f=http/test/site.zip d=http/test"eval "исполняет" эту строку, то есть в переменным f и d присваивается как раз то, что нужно.
>Или доку какую.
http://gazette.linux.ru.net/rus/articles/index-abs-guide.html
>eval "исполняет" эту строку, то есть в переменным f и d присваивается
>как раз то, что нужно.
>Поробую подробне расписать, есть скрипт, который при ручном вводе отрабтывает всё на 5:
#!/bin/sh
echo Content-type: text/plain
echo
/usr/bin/unzip -x ../http/site.zip -d ../httpКак только я написал:
#!/bin/sh
echo Content-type: text/plain
echo
echo "<b>метод POST</b><br>"
cat
echo "<br>"
eval ${CONTENT_LENGTH//&/ }
set | grep CONTENT_LENGTH
/usr/bin/unzip -x ../$f -d ../$dт.е. передал постом, скрипт мне выдает:
<b>метод POST</b><br>
f=http%2Ftestinnnngi.zip&d=http%2F<br>
CONTENT_LENGTH=34и естественно ничего не происходит :(
может как-то не правильно с переменными работаю?
>Как только я написал:
>
>#!/bin/sh
>echo Content-type: text/plain
>echo
>echo "<b>метод POST</b><br>"
>cat
>echo "<br>"
>eval ${CONTENT_LENGTH//&/ }
>set | grep CONTENT_LENGTH
>/usr/bin/unzip -x ../$f -d ../$d
>
>т.е. передал постом, скрипт мне выдает:
><b>метод POST</b><br>
>f=http%2Ftestinnnngi.zip&d=http%2F<br>
>CONTENT_LENGTH=34
>
>и естественно ничего не происходит :(
>может как-то не правильно с переменными работаю?мдя, и я ступил... CONTENT_LENGTH это ж просто количество символов...
насколько я разбираюсь в CGI, надо делать примерно следующееstr=`cat` # получаем данные POST
eval ${str//&/ } # присваиваем переменным значенияну и дальше работаем с этими переменными
/usr/bin/unzip -x ../$f -d ../$dвот только кто будет переводить символы типа %2F - я не знаю :)
можно, конечно, и sed натравить...
>str=`cat` # получаем данные POST
>eval ${str//&/ } # присваиваем переменным значения
>
>ну и дальше работаем с этими переменными
>/usr/bin/unzip -x ../$f -d ../$d
>
>вот только кто будет переводить символы типа %2F - я не знаюСделал, и на всякий в качестве эксперимента убрал /:
str=`cat`
eval ${str//&/ }/usr/bin/unzip -x ../http/$f -d ../http/$d
html файл для передачи поста:
<FORM ACTION="/cgi-bin/unarh_new.cgi" METHOD="POST">
<input type=hidden value="testinnnngi.zip" name=f>
<input type=hidden value="" name=d>
<INPUT TYPE="submit" VALUE="Submit">
</FORM>и всё равно без изменений :((
при этом явное указание работает :((
А может использовать метод GET?
>А может использовать метод GET?А подробнее?
Чем отличаются понимаю, но чем могут помочь в данном случае?
>>str=`cat` # получаем данные POST
>>eval ${str//&/ } # присваиваем переменным значения
>>
>>ну и дальше работаем с этими переменными
>>/usr/bin/unzip -x ../$f -d ../$d
>>
>>вот только кто будет переводить символы типа %2F - я не знаю
>
>Сделал, и на всякий в качестве эксперимента убрал /:
>
>str=`cat`
>eval ${str//&/ }
>
>/usr/bin/unzip -x ../http/$f -d ../http/$d
>
>html файл для передачи поста:
> <FORM ACTION="/cgi-bin/unarh_new.cgi" METHOD="POST">
> <input type=hidden value="testinnnngi.zip" name=f>
> <input type=hidden value="" name=d>
> <INPUT TYPE="submit" VALUE="Submit">
> </FORM>
>
>и всё равно без изменений :((
>при этом явное указание работает :((а если перед eval посмотреть на данные?
echo "str=$str<br>"
>а если перед eval посмотреть на данные?
>echo "str=$str<br>"делаем так:
echo "str=$str"
str=`cat`
eval ${str//&/ }на выходе:
f=testinnnngi.zip&d=<br>
str=
CONTENT_LENGTH=20и если после евал ставить, тоже самое...
>echo "<b>метод POST</b><br>"
>cat
^^^^^^
>echo "<br>"слушай, а зачем у тебя там cat ?!!
он и отнимает у str данные :)
>>echo "<b>метод POST</b><br>"
>>cat
>^^^^^^
>>echo "<br>"
>
>слушай, а зачем у тебя там cat ?!!
>он и отнимает у str данные :)Убрал, если ставить до евал ничего не пишет, если после:
str=`cat`
eval ${str//&/ }
echo "str=$str"на выходе:
str=f=testinnnngi.zip&d=
>Убрал, если ставить до евал ничего не пишет, если после:
>str=`cat`
>eval ${str//&/ }
>echo "str=$str"
>
>на выходе:
>str=f=testinnnngi.zip&d=Ну, собственно, это и должно быть.
Больше интересует, отрабатывает ли правильно после
>str=`cat`
>eval ${str//&/ }
твоя команда
>/usr/bin/unzip -x ../$f -d ../$d
?Что говорит
echo /usr/bin/unzip -x ../$f -d ../$d
?
>Больше интересует, отрабатывает ли правильно после
>>str=`cat`
>>eval ${str//&/ }
>твоя команда
>>/usr/bin/unzip -x ../$f -d ../$d
>?
>
>Что говорит
>echo /usr/bin/unzip -x ../$f -d ../$d
>?Сорри, пропал, траблы с нетом.
Вот чего пишет:
/usr/bin/unzip -x ../ -d ../