${MY_ENV_VAR}
다음 시나리오에서 페이로드는 어떻게 전달됩니까?
나는 탈출해야 할 것이다:
a) 로드에 대한 작은따옴표
text
b) json 필드 값에 대한 큰따옴표
${MY_ENV_VAR)
물론 보간해야합니다.
#!/bin/bash
COMMAND=${MY_ENV_VAR}
curl -X POST --data-urlencode 'payload={"channel": "#alerts", "username": "k8s-cronjobs-bot", "text": "Command ${MY_ENV_VAR} run with success", "icon_emoji": ":ghost:"}' ${SLACK_WEBHOOK}
답변1
그리고 jq
:
$ payload='{"channel": "#alerts", "username": "k8s-cronjobs-bot", "text": "", "icon_emoji": ":ghost:"}'
$ MY_ENV_VAR='"foo"'
$ echo "$payload" | jq --arg cmd "$MY_ENV_VAR" '.text = "Command " + $cmd + " run with success"'
{
"channel": "#alerts",
"username": "k8s-cronjobs-bot",
"text": "Command \"foo\" run with success",
"icon_emoji": ":ghost:"
}
따라서 스크립트는 다음과 같습니다.
#!/bin/bash
COMMAND=${MY_ENV_VAR}
payload='{"channel": "#alerts", "username": "k8s-cronjobs-bot", "text": "", "icon_emoji": ":ghost:"}'
payload=$(echo "$payload" | jq -r --arg cmd "$COMMAND" '.text = "Command " + $cmd + " run with success"')
curl -X POST --data-urlencode "payload=$payload" "${SLACK_WEBHOOK}"
답변2
또는 printf
인용문을 혼합하는 데 도움이 필요한 경우:
printf -v payload '{"channel": "#alerts", "username": "k8s-cronjobs-bot", "text": "Command %s run with success", "icon_emoji": ":ghost:"}' "$MY_ENV_VAR"
curl -X POST --data-urlencode "payload=$payload" "$SLACK_WEBHOOK"