将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'
答案 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>