Переменная Pipe из файла Bash в команду JQ в другом файле Bash - PullRequest
0 голосов
/ 25 августа 2018

Цель

Переменная конвейера из файла Bash в команду JQ в другом файле Bash

Контекст

У меня есть файл JSON с двумя пустыми значениями, которые я хочу заполнить:

  • HTML-файл
  • Переменная в файле Bash (file-b.sh)

HTML часть работает. Я не могу понять переменную часть. Я показываю часть HTML, чтобы продемонстрировать логику, которой я пытаюсь следовать.

file-a.sh

#!/bin/bash

#This line (for the HTML portion) works:
jq --arg text "$(<file.html)" '.content.text=($text | @html)' my-json.json > file.json

# This line (for the Bash variable) doesn't...see end of question for result:
jq --arg variable "$subject" '.subject=$variable' file.json > file-1.json

file-b.sh

#!/bin/bash

subject="abc"
export subject
./file-a.sh

file-1.json: результат

В результате заполняется content.text, а subject печатается буквально как переменная, которую я пытался закодировать.

{
  "content": {
    "text": "Is populated; works great"
  },
  "subject": "$subject",
}

Основываясь на том, что я прочитал, я перепробовал много итераций одинарных, двойных, круглых скобок (например, {"$subject"} или ".subject=$variable"), echo в трубе, но по-прежнему терпел неудачу. Спасибо за любые идеи.

1 Ответ

0 голосов
/ 25 августа 2018

Мне кажется, что вам не нужны два скрипта bash. Вы можете вызвать file-a.sh с аргументом:

./file-a.sh "This is my subject" 

и внутри файла-a.sh вы можете получить доступ к аргументу как:

echo "Subject: $1"

... где $ 1, $ 2 и т. Д. - переменные

...