Bash / JQ - 解析错误:第1行第63列的值之间的预期分隔符

时间:2017-07-12 20:29:00

标签: bash jq

我怀疑是bash脚本中的引用错误。

SECRET_VALUE_CMD="curl -s -L -H \"X-Vault-Token: $VAULT_TOKEN\" -X GET \"https://$VAULT_ADDR/v1/secret/$secret_path\""
SECRET_VALUE_RESPONSE=$(eval $SECRET_VALUE_CMD)
SECRET_VALUE=$(echo "$SECRET_VALUE_RESPONSE" | jq --raw-output '.data.value')

当我在我的脚本中执行此操作时,我将以下内容发送到stderr:

parse error: Expected separator between values at line 1, column 63

和$ SECRET_VALUE为空。

$ SECRET_VALUE_RESPONSE的一个例子是:

{"request_id":"XXXX-YYYY..,"lease_id":"","renewable":false,"lease_duration":nnnnnn,"data":{"value":"secret-value"},"wrap_info":null,"warnings":null,"auth":null}

我尝试在参数周围添加转义引号到eval和echo,但似乎无法找到工作组合。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

请勿使用eval。您可以创建一个执行curl的函数,例如:

get_secret_value() {
    curl -s -L -H "X-Vault-Token: $VAULT_TOKEN" -X GET "https://$VAULT_ADDR/v1/secret/$secret_path"
}

secret_value=$(get_secret_value | jq --raw-output '.data.value')