如何在json文件中传递bash变量值

时间:2019-02-07 01:07:10

标签: json bash

将bash变量值添加到json文件

我正在尝试使用以下curl命令从nexus获取最新的zip文件。

卷曲的输出是这样的:1.0.0.0-20190205.195251-396

在json字段中,我需要更新此值(1.0.0.0-20190205.195251-396):developer-service-1.0.0.0-20190205.195251-396.zip

错误:[2019-02-06T16:19:17-08:00]警告:无法从https://nexus.gnc.net/nexus/content/repositories/CO-Snapshots/com/GNC/platform/developer/developer-service/1.0.9.9-SNAPSHOT/developer-service-.zip下载remote_file [/var/chef/cache/developer-service-.zip]:404“找不到”

#!/bin/bash
latest=`curl -s http://nexus.gnc.net/nexus/content/repositories/CO-Snapshots/com/gnc/platform/developer/developer-service/1.0.9.9-SNAPSHOT/maven-metadata.xml | grep -i value | head -1 | cut -d ">" -f 2 | cut -d "<" -f 1`

echo $latest

sudo bash -c 'cat << EOF > /etc/chef/deploy_service.json
{
  "portal" : {
    "nexus_snapshot_version":"developer-service-${latest}.zip"
    }
}
EOF'

1 个答案:

答案 0 :(得分:0)

问题是当您使用“ $ {latest}”时,它位于单引号内,因此不被视为变量引用,而只是一些文字文本;它将传递给子shell(bash -c,而 that 会将其解析为变量引用,并将其替换为变量latest的值,但是仅定义了该变量您可以export变量(这样子变量将被子进程继承),然后使用sudo -E来防止sudo清理环境(因此删除变量)...但是整个事情太复杂了;使用standard sudo tee trick的方法要简单得多:

sudo tee ./deploy_service.json >/dev/null <<EOF
{
  "portal" : {
    "nexus_snapshot_version":"developer-service-${latest}.zip"
    }
}
EOF

这样,就没有单引号字符串,没有子shell等了。变量引用现在仅在一个普通的here-document(由知道$latest的shell解释)中,并且可以正常扩展。 / p>