URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10068
[ Назад ]

Исходное сообщение
"Проблема с пробелами в shell"

Отправлено alexey_and , 19-Янв-16 21:22 
Здравствуйте
имеется непонятная проблема, полагаю связанная с пробелами
скрипт:
#!/bin/sh

CDVOLU=$(df | sed -ne  "s,^$disk.*\(/Volumes.*\)$,\1,p" | grep -v store | grep -v alex)
echo $CDVOLU

CDVOLUM=$(echo $CDVOLU | sed "s/ / /g")/   #попытка заменить пробелы на  "%2O"

echo $CDVOLUM

echo curl -H Content-Type: application/json -X POST -d {"jsonrpc":"2.0","id":"1","method":"Player.Open","params":{"item":{"directory":"'$CDVOLUM'"}}} http://192.168.1.5:8081/jsonrpc

echo `curl -H Content-Type: application/json -X POST -d {"jsonrpc":"2.0","id":"1","method":"Player.Open","params":{"item":{"directory":"'$CDVOLUM'"}}} http://192.168.1.5:8081/jsonrpc`

результат:
sh-3.2# ./cd1.sh
/Volumes/Rocket Ride
/Volumes/Rocket%2ORide/
curl -H Content-Type: application/json -X POST -d jsonrpc:2.0 id:1 method:Player.Open params:{item:{directory:'/Volumes/Rocket%2ORide/'}} http://192.168.1.5:8081/jsonrpc
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (6) Could not resolve host: application
curl: (6) Could not resolve host: id
curl: (6) Could not resolve host: method
curl: (3) [globbing] nested brace in column 14
100    87  100    76  100    11  90800  13142 --:--:-- --:--:-- --:--:-- 90800
{"error":{"code":-32700,"message":"Parse error."},"id":null,"jsonrpc":"2.0"}

пробел меняется корректно, но ссылку все равно не съедает
если пробел не менять, все то же самое - parse error
когда в переменной нет пробела, отрабатывает корректно

прокатывает так:
echo `curl -H Content-Type: application/json -X POST -d '{"jsonrpc":"2.0","id":"1","method":"Player.Open","params":{"item":{"directory":"/Volumes/Rocket Ride/"}}}' http://192.168.1.5:8081/jsonrpc`

но если заменить /Volumes/Rocket Ride/ на переменную, опять parse error


Содержание

Сообщения в этом обсуждении
"Проблема с пробелами в shell"
Отправлено StreSS.t , 20-Янв-16 17:53 
man bash
И искать что такое { }
и что такое ' '
У вас получило что {"json... - не экранировать, а переменную
$CDVOLUM - экранировать
echo `curl -H Content-Type: application/json -X POST -d '{"jsonrpc":"2.0","id":"1","method":"Player.Open","params":{"item":{"directory":"'$CDVOLUM'"}}}' http://192.168.1.5:8081/jsonrpc`

Замена %20 не нужна (у Вас почему-то "2O", такого кода символа быть не может).


"Проблема с пробелами в shell"
Отправлено alexey_and , 20-Янв-16 18:16 
> man bash
> И искать что такое { }
> и что такое ' '
> У вас получило что {"json... - не экранировать, а переменную
> $CDVOLUM - экранировать
> echo `curl -H Content-Type: application/json -X POST -d '{"jsonrpc":"2.0","id":"1","method":"Player.Open","params":{"item":{"directory":"'$CDVOLUM'"}}}'
> http://192.168.1.5:8081/jsonrpc`
> Замена %20 не нужна (у Вас почему-то "2O", такого кода символа быть
> не может).

конечно %двадцать, так написал потому что форум не берет
решил пока так
echo `curl --silent -H Content-Type: application/json -X POST -d "{\"jsonrpc\":\"2.0\",\"id\":\"1\",\"method\":\"Player.Open\",\"params\":{\"item\":{\"directory\":\"$CDVOLU\"}}}" http://192.168.1.5:8081/jsonrpc`


"Проблема с пробелами в shell"
Отправлено StreSS.t , 20-Янв-16 18:20 
Ох люди-человеки...
Т.е. вы как  китайский программист "не доверяю конструкции a[5,5]=0 я каждому элементу в ручную присвою 0... a[0,0]=0 ; a[0,1]=0"
Либо вы еще не научились входу отличать апострофы от кавычек.

"Проблема с пробелами в shell"
Отправлено alexey_and , 20-Янв-16 18:23 
> Ох люди-человеки...
> Т.е. вы как  китайский программист "не доверяю конструкции a[5,5]=0 я каждому
> элементу в ручную присвою 0... a[0,0]=0 ; a[0,1]=0"
> Либо вы еще не научились входу отличать апострофы от кавычек.

ну, я не программист, а до этой конструкции дошел и правда китайским методом перебора ))


"Проблема с пробелами в shell"
Отправлено StreSS.t , 20-Янв-16 18:27 
"что-то" - все спец символы не будут экранированы
'что-то' - экранировано все

$VAR=FOO
' " bla bla " ' $VAR ' " bla bla " '
Даст на выходе
" bla bla "  FOO " bla bla "
Пробелы оставил специально


"Проблема с пробелами в shell"
Отправлено ALex_hha , 16-Апр-16 18:03 
> решил пока так
> echo `curl --silent -H Content-Type: application/json -X POST -d "{\"jsonrpc\":\"2.0\",\"id\":\"1\",\"method\":\"Player.Open\",\"params\":{\"item\":{\"directory\":\"$CDVOLU\"}}}"
> http://192.168.1.5:8081/jsonrpc`

ужос, а чем не угодило?


curl --silent -H Content-Type: application/json -X POST -d '{"jsonrpc":"2.0","id":"1","method":"Player.Open","params":{"item":{"directory":"'$CDVOLU'"}}}"' http://192.168.1.5:8081/jsonrpc