2015-03-29 2 views
0

У меня есть конечная точка URL, которую я хочу получить из массива JSON. Если я использую следующее в командной строке Linux, она прекрасно работает:Объявление переменной bash из разбора JSON с curl и python

curl -s http://10.10.1.10/api/ping | python -c 'import sys, json; print json.load(sys.stdin)["service"]' 

Где «Сервис» является членом Пытаюсь доступа. Я получаю допустимый вывод, например Collection Service Я хочу присвоить этот вывод переменной в сценарии bash.

#!/bin/bash 
SERVICE= "$(curl -s http://10.10.1.10/api/ping)" | python -c 'import sys, json; print json.load(sys.stdin)["service"]' 

Однако это просто дает мне ошибку, заявив, что мой массив JSON не является командой.

Возможно ли это? Что я делаю не так?

ответ

3

У вас есть некоторые нечетные кавычки и бодрящий в вашем примере. Я думаю, если вы просто возьмете команду, которая работает, чтобы напечатать нужное значение и поместите ее в $ (...), вы получите то, что хотите, так что это будет

SERVICE=$(curl -s http://10.10.1.10/api/ping | python -c 'import sys, json; print json.load(sys.stdin)["service"]') 
4

Вы можете использовать ` кавычки, чтобы захватить значение из команды:

SERVICE=`curl -s http://10.10.1.10/api/ping | python -c 'import sys, json; print json.load(sys.stdin)["service"]'` 

или положить $(...) вокруг всей команды; `...` и $(...) эквивалентны здесь:

SERVICE=$(curl -s http://10.10.1.10/api/ping | python -c 'import sys, json; print json.load(sys.stdin)["service"]')