Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json bash脚本中的ARM.Template。未终止的字符串。预期的分隔符:_Json_Linux_Bash_Shell - Fatal编程技术网

Json bash脚本中的ARM.Template。未终止的字符串。预期的分隔符:

Json bash脚本中的ARM.Template。未终止的字符串。预期的分隔符:,json,linux,bash,shell,Json,Linux,Bash,Shell,我正在编写一个bash脚本,用于使用“armclient”将证书从linux服务器上载到azure keyvault 关于如何使用armclient,我遵循以下指南: 我要执行的命令如下: ARMClient.exe PUT /subscriptions/<Subscription Id>/resourceGroups/<Server Farm Resource Group>/providers/Microsoft.Web/certificates/<User F

我正在编写一个bash脚本,用于使用“armclient”将证书从linux服务器上载到azure keyvault

关于如何使用armclient,我遵循以下指南:

我要执行的命令如下:

ARMClient.exe PUT /subscriptions/<Subscription Id>/resourceGroups/<Server Farm Resource Group>/providers/Microsoft.Web/certificates/<User Friendly Resource Name>?api-version=2016-03-01 "{'Location':'<Web App Location>','Properties':{'KeyVaultId':'<Key Vault Resource Id>', 'KeyVaultSecretName':'<Secret Name>', 'serverFarmId':'<Server Farm (App Service Plan) resource Id>'}}"
当我回显变量putparm的输出时,结果看起来与预期的一样(X-ed out name/id):

当我运行
armclient时,在脚本中放入$putparm
,我得到以下错误:

“错误”:{ “代码”:“InvalidRequestContent”, “消息”:“请求内容无效,无法反序列化:'未终止字符串。应为分隔符:\”。路径“”, 第1行,位置21.“}”

但是,当我获取$putparm变量的输出并在服务器上“手动”运行命令时,它就工作了

我猜这与linux存储变量的方式有关,而且API正在请求JSON(或其他东西)


欢迎您的帮助。

您定义变量的方式
putparam
是错误的

它可能被解释为文字字符串,而不是对象。请注意,一个简单的字符串,如
“hello”
,是一个有效的JSON数据,但它可能不是服务器所期望的

如果要正确引用变量,请执行以下操作:

putparm="{\"Location\":\"$resolved_locationid\",\"Properties\":{\"KeyVaultId\":\"$resolved_keyvaultid\",\"KeyVaultSecretName\":\"$certname\",\"serverFarmId\":\"$resolved_farmid\"}}"
然后像这样使用它:

armclient put "$resolved_armapi" "$putparm"

是的,我发现了JSON的问题。问题是我不知道如何解决。你发布的报价也不起作用(相同的错误)。当我使用它转换字符串时,它就开始工作了。并将其粘贴到Json文件中。在不知道您的工具
armclient
实际需要什么的情况下,这有点像尝试一个错误…您至少可以引用您的变量,并像这样使用它
armclient put“$putparm”“
并尝试在json数据周围使用单引号,如
putparm=“$resolved_armapi'{…}”
@Fredrik实际上,最好调用
armclient put“$resolved_armapi”“$putparm”
这样的工具,其中
$putparm
只包含json数据,这就是我最后所做的。我创建了一个json模板文件,在那里我交换了变量并将其发送给了armclient。@Fredrik感谢您的反馈,我更新了答案
putparm="{\"Location\":\"$resolved_locationid\",\"Properties\":{\"KeyVaultId\":\"$resolved_keyvaultid\",\"KeyVaultSecretName\":\"$certname\",\"serverFarmId\":\"$resolved_farmid\"}}"
armclient put "$resolved_armapi" "$putparm"