Bash 使用脚本获取转义变量键值
Bash getting escaped variable key value with script
我想使用 jq 从 Traefik API 服务中获取值。该服务的输出如下所示:
{
"loadBalancer": {
"servers": [
{
"url": "http://172.18.0.19:3000"
},
{
"url": "http://172.18.0.17:3000"
},
{
"url": "http://172.20.0.3:3000"
}
],
"healthCheck": {
"path": "/health",
"interval": "10s",
"timeout": "10s",
"followRedirects": true
},
"passHostHeader": true
},
"status": "enabled",
"serverStatus": {
"http://172.18.0.17:3000": "UP",
"http://172.18.0.19:3000": "UP",
"http://172.20.0.3:3000": "DOWN"
},
"provider": "docker",
"type": "loadbalancer"
}
我想动态获取 serverStatus
的值。首先从 docker 检查中分配一个具有正确 IP 地址的变量。我正在使用 curl
和 jq
来检查容器是否正在维修。
问题是当用变量获取它时,我似乎无法转义 url 键中的特殊字符。 未返回任何内容。
这是我使用的命令是:
TRAEFIK_URL="http://someurl.com/"
TRAEFIK_URL="'Authorization: Basic hashkey"
NEW_IPADDRESS=$(docker container inspect some_container_name | jq -r .[].NetworkSettings.Networks.proxy.IPAddress)
NEW_ENV_URL="http://${NEW_IPADDRESS}:3000"
curl --location --request GET "$TRAEFIK_URL" --header "$TRAEFIK_AUTH_HEADER" | jq -r '.serverStatus["${NEW_ENV_URL}"]'
我试过使用这个命令和其他一些明显的选项,但都没有用。
jq -r .serverStatus[$NEW_ENV_URL]
当我不使用变量来获取状态时,我确实得到了正确的值:
jq -r '.serverStatus["http://172.18.0.17:3000"]'
欢迎任何帮助。
使用选项 --arg
将参数传递给 jq
。
jq --arg url http://172.18.0.17:3000 -r '.serverStatus[$url]'
始终使用此选项以避免注入引起的安全问题。
将特定环境变量传递到 jq 的首选方法之一是使用 --arg
命令行选项;在你的情况下:
jq -r --arg url "${NEW_ENV_URL}" '.serverStatus[$url]'
我想使用 jq 从 Traefik API 服务中获取值。该服务的输出如下所示:
{
"loadBalancer": {
"servers": [
{
"url": "http://172.18.0.19:3000"
},
{
"url": "http://172.18.0.17:3000"
},
{
"url": "http://172.20.0.3:3000"
}
],
"healthCheck": {
"path": "/health",
"interval": "10s",
"timeout": "10s",
"followRedirects": true
},
"passHostHeader": true
},
"status": "enabled",
"serverStatus": {
"http://172.18.0.17:3000": "UP",
"http://172.18.0.19:3000": "UP",
"http://172.20.0.3:3000": "DOWN"
},
"provider": "docker",
"type": "loadbalancer"
}
我想动态获取 serverStatus
的值。首先从 docker 检查中分配一个具有正确 IP 地址的变量。我正在使用 curl
和 jq
来检查容器是否正在维修。
问题是当用变量获取它时,我似乎无法转义 url 键中的特殊字符。 未返回任何内容。
这是我使用的命令是:
TRAEFIK_URL="http://someurl.com/"
TRAEFIK_URL="'Authorization: Basic hashkey"
NEW_IPADDRESS=$(docker container inspect some_container_name | jq -r .[].NetworkSettings.Networks.proxy.IPAddress)
NEW_ENV_URL="http://${NEW_IPADDRESS}:3000"
curl --location --request GET "$TRAEFIK_URL" --header "$TRAEFIK_AUTH_HEADER" | jq -r '.serverStatus["${NEW_ENV_URL}"]'
我试过使用这个命令和其他一些明显的选项,但都没有用。
jq -r .serverStatus[$NEW_ENV_URL]
当我不使用变量来获取状态时,我确实得到了正确的值:
jq -r '.serverStatus["http://172.18.0.17:3000"]'
欢迎任何帮助。
使用选项 --arg
将参数传递给 jq
。
jq --arg url http://172.18.0.17:3000 -r '.serverStatus[$url]'
始终使用此选项以避免注入引起的安全问题。
将特定环境变量传递到 jq 的首选方法之一是使用 --arg
命令行选项;在你的情况下:
jq -r --arg url "${NEW_ENV_URL}" '.serverStatus[$url]'