Bash 如何获得';应用程序URI';来自Bluemix Cloudfoundry应用程序的shell脚本?

Bash 如何获得';应用程序URI';来自Bluemix Cloudfoundry应用程序的shell脚本?,bash,shell,awk,sed,ibm-cloud,Bash,Shell,Awk,Sed,Ibm Cloud,我有一个Dev-Ops-Services管道,我正在使用它使用CloudFoundry和MongoDB自动设置MeteorJS应用程序(实际上只是一个NodeJS应用程序) 我在Dev Opts服务中有以下部署脚本: ``` #!/bin/bash cf create-service compose-for-mongodb Standard mongodbbuzzy01 cf push "${CF_APP}" --no-start mongourl=$(cf env ${CF_APP} | eg

我有一个Dev-Ops-Services管道,我正在使用它使用CloudFoundry和MongoDB自动设置MeteorJS应用程序(实际上只是一个NodeJS应用程序)

我在Dev Opts服务中有以下部署脚本:

```
#!/bin/bash
cf create-service compose-for-mongodb Standard mongodbbuzzy01
cf push "${CF_APP}" --no-start
mongourl=$(cf env ${CF_APP} | egrep -o 'mongodb://.*"' | rev | cut -c 2- | rev); cf set-env ${CF_APP} MONGO_URL $mongourl
cf restage "${CF_APP}"
```
这允许我从
VCAP_服务
获取mongourl,然后将其设置为MONGO_URL环境变量(在DevOps shell命令中)

我也需要为Meteor需要的
根URL
做同样的事情。自从我上次使用sed/awk/grep脚本以来已经有20年了,我需要从
cf env
文本中取出Bluemix应用程序的URI(该文本包含一些JSON)

cf env的结果是文本和JSON对象的混合(所以实际上只是文本)

在组织Buzzy/space dev中获取应用程序buzzy7build的环境变量作为adam。ginsburg@buzzy.buzz...
好啊
提供的系统:
{
“VCAP_服务”:{
“为mongodb撰写”:[
{
“全权证书”:{
……只是把细节说出来
}
}
}
{
“VCAP_应用程序”:{
“应用程序id”:“,
“应用程序名称”:“,
“应用程序URI”:[
""
],
...
因此,我需要一些帮助来使用Bluemix shellscrip提取
(当然,如果这是NodeJS,就很容易了)

在bluemixshell中没有
jq
(我知道),所以只有
sed、awk、grep等

谢谢你的帮助

谢谢

仅当无法使用
jq
解析
JSON


awk
中使用的逻辑是,它查找包含
应用程序URI
的行,从匹配行中获取下一行,
getline n
获取下一行,并存储在变量
n
中。从收到的行中,我们使用
gsub()删除
和前导空格

您能否提供完整的
JSON
,这是您实际输出的一个示例?测试命令很容易。@Inianthanks请看这里不清楚您在第36行的
“application\u uri”或
“uri”中使用的是哪一个:[
在第48行,我想它们都是一样的,所以either@Inian谢谢你,非常感谢
Getting env variables for app buzzy7build in org Buzzy / space dev as adam.ginsburg@buzzy.buzz...
OK

System-Provided:
{
 "VCAP_SERVICES": {
  "compose-for-mongodb": [
   {
    "credentials": {
.... just curring out details
   }
  }
}


{
 "VCAP_APPLICATION": {
  "application_id": "<some app id>",
  "application_name": "<app name>",
  "application_uris": [
   "<the uri I am trying to get>"
  ],
...
 awk '$0 ~ /application_uris/{getline n; gsub("\"|^[[:space:]]+","",n); print n}' file
<domain name>
 "application_uris": [
  "<domain name>"
]