如何自定义松弛负载

如何自定义松弛负载

我正在尝试将 slack 与我的 shell 脚本之一集成。我有不同的条件,有效负载的消息部分是不同的。

我的脚本看起来像

#!/bin/bash

SLACK_URL='https://hooks.slack.com/services/******
CHANNEL="#channel"
PAYLOAD="'payload={\"channel\": \"${SLACK_CHANNEL}\", \"username\": \"${USER}\", \"text\": \"$MESSAGE\", \"icon_emoji\": \":slack:\"}"

案例1:条件:

 curl -s -S -X POST --data-urlencode "$PAYLOAD" $SLACK_URL

情况2:条件

  curl -s -S -X POST --data-urlencode "$PAYLOAD" $SLACK_URL

情况3:条件

  curl -s -S -X POST --data-urlencode "$PAYLOAD" $SLACK_URL

在每种情况下,我的消息应该不同。我试图避免每次使用自定义消息声明有效负载,寻找一个可以将自定义消息解析为有效负载的选项。请帮助。

答案1

$PAYLOAD您可以根据自己的条件一点一点地构建:

PAYLOAD="payload={"
PAYLOAD="$PAYLOAD\"channel\": \"${SLACK_CHANNEL}\","
PAYLOAD="$PAYLOAD\"username\": \"${USER}\","

case $MESSAGE_TYPE in
    1)
        PAYLOAD="$PAYLOAD \"text\": \"$MESSAGE1\","
        ;;
    2)
        PAYLOAD="$PAYLOAD \"text\": \"$MESSAGE2\","
        ;;
    3)
        PAYLOAD="$PAYLOAD \"text\": \"$MESSAGE3\","
        ;;
esac

PAYLOAD="$PAYLOAD \"icon_emoji\": \":slack:\""
PAYLOAD="$PAYLOAD}"

curl -s -S -X POST --data-urlencode "$PAYLOAD" $SLACK_URL

或者,一旦您设置正确,您可以让 Bash 延迟评估$PAYLOADeval$MESSAGE

PAYLOAD_PATTERN='payload={\"channel\": \"${SLACK_CHANNEL}\", \"username\": \"${USER}\", \"text\": \"$MESSAGE\", \"icon_emoji\": \":slack:\"}'
MESSAGE=...
eval "PAYLOAD=\"$PAYLOAD_PATTERN\""

curl -s -S -X POST --data-urlencode "$PAYLOAD" $SLACK_URL

这是 shell 编程中的常见模式。但请注意,如果您将变量的任何部分扩展为包含$PAYLOAD_PATTERN不受信任的输入的一部分,eval则以这种方式使用可能会导致安全问题,因为有能力影响任意输入的对手可能会使用它来获取任意代码执行脚本的系统上的执行能力。

相关内容