从另一个文件填充变量,以bash / shell脚本读取用户输入

时间:2018-10-26 08:46:08

标签: json bash shell unix curl

我使用户可以回答一些问题,以便我可以执行相应的cURL请求并相应地创建所需的内容。

通过这种方式:

〜functions.sh

lazy val myProjectRoot = project.in(file(".")).settings(...).dependsOn(otherProject)

该脚本由两个文件组成:

  • functions.sh,我在其中存储所有功能
  • flow.sh,按顺序询问问题和调用先前的功能
  • credentials.sh,我在其中存储api密钥凭据,api url等。
  • env.sh,我希望在其中存储需要动态生成的环境配置...

不幸的是,由于我来自前端背景,因此我对此很陌生,因此我不知道或无法在此处找到/实现以下目标:

我将需要根据用户答案之一发送一个cURL请求,这很容易做到,只需在function.sh函数之一中调用即{$ question1},然后在主流程中调用即可。将文件作为源文件之后...

不幸的是,当涉及到在一个单独的文件中填充多行环境配置,以便稍后在cURL中作为json发送时,它脱离了我的舒适范围...

Id需要如此发送一些东西

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

其中$ env是env.sh文件,json有效,并相应地填充了从用户输入之前读取的变量...

要解决多行json问题,也许我可以使用以下代码:

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

对于如何填充用户读取的文件格式并在cURL中的json部分内回显它,我还是一无所知。

2 个答案:

答案 0 :(得分:2)

您可以使用awk将正确的JSON数据直接保存到env.sh(部分取自Dr.K's answer to this other question):

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"
    }
  ]
}

这是您的主意吗?

答案 1 :(得分:0)

对于任何在这里结束的人,我所做的是:

创建一个单独的文件,在其中设置变量,并在其中放置EOF。

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

export env

然后我通过jq生成一个有效的json

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}"

}