Заполнение переменных из другого файла, чтение пользовательского ввода в скрипте bash / shell - PullRequest
0 голосов
/ 26 октября 2018

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

Таким образом:

~ functions.sh

echo "Question number 1?"
read question1
echo "Question number 2?"
read question2

Сценарий состоит из пары файлов:

  • functions.sh, где я храню все функции
  • flow.sh, гдезадаются вопросы, и предыдущие функции вызываются в следующем порядке:
  • credentials.sh, где я храню учетные данные ключа API, URL-адрес api и т. д.
  • env.sh, где я надеюсь сохранитьКонфигурация env, которая должна генерироваться динамически ...

К сожалению, я довольно новичок в этом, поскольку пришел из Фронтенда, поэтому я не в курсе или не могу найти / найти здесь, как добиться следующего:

Мне нужно отправить запрос cURL на основе одного из ответов пользователя, и это легко сделать, просто вызвав ie {$ question1} внутри одной из функций functions.shэто яater вызывается в основном файле flow.sh после помещения файла в качестве источника ...

К сожалению, когда дело доходит до заполнения конфигурации многострочного окружения в отдельном файле, который впоследствии будет отправлен как json в cURLон выходит из моей зоны комфорта ...

Мне нужно, поэтому пошлите что-то вроде

curl -X POST "https//api.url"
-H "headers"
--data '{"content":"'{$env}'"}'

Где $ env - файл env.sh, допустимый json и заполненныйпеременные, считанные ранее из пользовательского ввода соответственно ...

Чтобы решить многострочную проблему JSON, возможно, я мог бы использовать следующее:

$( awk '{printf "%s\\n", $0}' ./env.sh )

Тем не менее я не знаю, как заполнить такой файлпользователь формы читает и выводит его внутри этой части json в cURL ...

Ответы [ 2 ]

0 голосов
/ 26 октября 2018

Для тех, кто в конечном итоге здесь, то, что я сделал, было:

Создание отдельного файла, в котором я устанавливаю переменную и определяю EOF внутри этого.

env=$( cat <<EOF
multi
line
content
goes
here
EOF
)

export env

Затем я генерирую правильный JSON через JQ

generate_json() {
  newenv="$( jq -nc --arg str "$env" '{"content": $str}' )"
}

и, наконец, я сразу использую $ newenv в завитке:

example_curl() {
  curl -X PUT "https://apiendpoint.co.uk" \
  -H "Authorization: Bearer 123123" \
  --data "${newenv}"

}

0 голосов
/ 26 октября 2018

Вы можете использовать awk для непосредственного сохранения правильных данных JSON в env.sh (частично взят из ответа Dr.K на этот другой вопрос ):

echo "Question number 1?"
read question1
echo "Question number 2?"
read question2
echo "Question number 3?"
read question3

awk ' BEGIN { print "[" ; }                     \
      { print  " {"                             \
        print  "   \"Question1\" : \""     $question1  "\","   \
        print  "   \"Question2\" : \""   $question2  "\","   \
        print  "   \"Question3\" : \""  $question3  "\""   \
        print  " }"                             \
      }                                         \
      END { print "]" } '  env.sh     

И тогда это должно работать правильно как JSON:

curl -X POST "https//api.url"
-H "headers"
--data '{"content":"{$env}"}'

и данные должны быть такими:

{
  content: [
    {
      "Question1" : "User answer 1",
      "Question2" : "User answer 2",
      "Question3" : "User answer 3"
    }
  ]
}

Это то, что вы имели в виду?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...