Slackを私のシェルスクリプトの1つと統合しようとしています。条件が異なり、ペイロードのメッセージ部分が異なります。
私のスクリプトは次のとおりです
#!/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
独自の条件に応じて1つずつ構成できます。
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遅延評価を実行できます$PAYLOAD
。eval
$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
これはシェルプログラミングの一般的なパターンです。ただし、$PAYLOAD_PATTERN
信頼できない入力の一部を含むように変数の一部を拡張すると、任意のeval
入力に影響を与える可能性のある攻撃者がそれを使用して任意のコードを取得する可能性があるため、この方法で使用するとセキュリティ上の問題が発生する可能性があります。 。スクリプトを実行するシステムで。