Невозможно использовать / передавать переменные оболочки, используя jq в командной строке - PullRequest
0 голосов
/ 10 января 2020

Я довольно новичок в jq, и я использую этот учебник, чтобы добавить новую Org в сеть Hyperledger fabri c.

В учебнике широко используется jq, особенно при модификации json файлы.

В учебном пособии используется пример имени организации, но я пытаюсь сделать имя организации динамическим c. Все работает хорошо, за исключением случаев, когда я пытаюсь передать переменные в jq.

Вот команды jq и их результаты.

jq версия: 1.5.1

$ export MSPID = Org4MSP $ echo $ MSPID Org4MSP

Попытка передать переменную с помощью env.

Ключевое слово: env.MSPID

$ jq -s '. [0] * {"channel_group": {"groups": {"Application": {"groups": {"env.MSPID":. [1]}}}}} 'config. json org4. json

Фрагмент вывода: вместо печати Org4MSP он печатает буквенную строку env.MSPID

      "env.MSPID": {
        "groups": {},
        "mod_policy": "Admins",
        "policies": {
          "Admins": {
            "mod_policy": "Admins",
            "policy": {
              "type": 1,
              "value": {
                "identities": [
                  {

Попытка передать переменную с помощью опции --arg

Ключевое слово: "$ MSP"

jq --arg MSP "$ MSPID" -s '. [0] * {"channel_group": {"groups": {"Application": {"groups": {"$ MSP":. [1]}}}} 'config. json org4. json

Фрагмент вывода: вместо печати Org4MSP он печатает буквенную строку $ MSP

      "$MSP": {
        "groups": {},
        "mod_policy": "Admins",
        "policies": {
          "Admins": {
            "mod_policy": "Admins",
            "policy": {
              "type": 1,
              "value": {
                "identities": [
                  {

Попытка передать переменную с использованием параметра --arg и без двойных кавычек:

ключевое слово: $ MSP

$ jq --arg MSP "$ MSPID" -s '. [0] * {"channel_group": {"groups": {"Application": {"groups": {$ MSP:. [1]}}}} 'config. json org4. json

jq: error: синтаксическая ошибка, неожиданное ':', ожидание '}' (Unix проблемы с цитированием оболочки?) в строке 1:

. [0] * {"channel_group": {"groups": {"Application": {"groups": {$ MSP:. [1]}}}}}

jq: 1 ошибка компиляции

Попытка передать переменную используя env. и без двойных кавычек:

ключевое слово: env.MSPID

$ jq -s '. [0] * {"channel_group": {"groups": {"Application": {"groups": {env.MSPID:. [1]}}}}} config. json org4. json

jq: error: синтаксическая ошибка, непредвиденное поле, ожидающее '}' (Unix проблемы с цитированием оболочки?) В строке 1:

. [0] * {"channel_group": {"groups": {"Application": {"groups": {env.MSPID:. [1]}}}}}

jq: 1 ошибка компиляции

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

Спасибо

1 Ответ

1 голос
/ 10 января 2020

Переменные окружения

В вашем подвыражении:

{"env.MSPID":.[1]}

вы указали env.MSPID, что делает его буквальной строкой. Поскольку вы хотите вызвать функцию env, вместо этого вы должны написать:

{ (env.MSPID):.[1]}

Скобки необходимы для того, чтобы jq правильно вычислял выражение в скобках.

{$ MSP: . [1]}

Как отмечено выше, когда выражение должно быть оценено для определения строкового значения ключа, выражение должно быть заключено в скобки, например,

 {($MSP):.[1]}
...