-
Star
(133)
You must be signed in to star a gist -
Fork
(59)
You must be signed in to fork a gist
-
-
Save andkirby/67a774513215d7ba06384186dd441d9e to your computer and use it in GitHub Desktop.
| #!/usr/bin/env bash | |
| #################################################################################### | |
| # Send message to slack channel/user | |
| # Usage: | |
| # Send a message to channel #ch-01 | |
| # $ bash slack.sh '#ch-01' 'Some message here.' | |
| # | |
| # Send a message to channel #ch-01 and user @me. | |
| # $ bash slack.sh '#ch-01,@me' MESSAGE | |
| # | |
| # Send a message to the default channel. | |
| # $ bash slack.sh MESSAGE | |
| # | |
| # Please declare environment variables: | |
| # - APP_SLACK_WEBHOOK | |
| # - APP_SLACK_CHANNEL (optional) | |
| # - APP_SLACK_USERNAME (optional) | |
| # - APP_SLACK_ICON_EMOJI (optional) | |
| #################################################################################### | |
| set -o pipefail | |
| set -o errexit | |
| set -o nounset | |
| #set -o xtrace | |
| # Set magic variables for current file & dir | |
| __dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | |
| __file="${__dir}/$(basename "${BASH_SOURCE[0]}")" | |
| readonly __dir __file | |
| cd ${__dir} | |
| if [ -f $(cd; pwd)/.slackshrc ]; then | |
| . $(cd; pwd)/.slackshrc | |
| fi | |
| declare -a slack_channels | |
| init_params() { | |
| # you may declare ENV vars in /etc/profile.d/slack.sh | |
| if [ -z "${APP_SLACK_WEBHOOK:-}" ]; then | |
| echo 'error: Please configure Slack environment variable: ' > /dev/stderr | |
| echo ' APP_SLACK_WEBHOOK' > /dev/stderr | |
| exit 2 | |
| fi | |
| APP_SLACK_USERNAME=${APP_SLACK_USERNAME:-$(hostname | cut --delimiter=. --fields=1)} | |
| APP_SLACK_ICON_EMOJI=${APP_SLACK_ICON_EMOJI:-:slack:} | |
| if [ -z "${1:-}" ]; then | |
| echo 'error: Missed required arguments.' > /dev/stderr | |
| echo 'note: Please follow this example:' > /dev/stderr | |
| echo ' $ slack.sh "#CHANNEL1,CHANNEL2" Some message here. ' > /dev/stderr | |
| exit 3 | |
| fi | |
| slack_channels=(${APP_SLACK_CHANNEL:-}) | |
| if [ "${1::1}" == '#' ] || [ "${1::1}" == '@' ]; then | |
| # explode by comma | |
| IFS=',' read -r -a slack_channels <<< "${1}" | |
| shift | |
| fi | |
| slack_message=${@} | |
| } | |
| send_message() { | |
| local channel=${1} | |
| echo 'Sending to '${channel}'...' | |
| curl --silent --data-urlencode \ | |
| "$(printf 'payload={"text": "%s", "channel": "%s", "username": "%s", "as_user": "true", "link_names": "true", "icon_emoji": "%s" }' \ | |
| "${slack_message}" \ | |
| "${channel}" \ | |
| "${APP_SLACK_USERNAME}" \ | |
| "${APP_SLACK_ICON_EMOJI}" \ | |
| )" \ | |
| ${APP_SLACK_WEBHOOK} || true | |
| echo | |
| } | |
| send_message_to_channels() { | |
| for channel in "${slack_channels[@]:-}"; do | |
| send_message "${channel}" | |
| done | |
| } | |
| init_params ${@} | |
| send_message_to_channels | |
So, is there some patch to improve the script? :)
You should consider implementing multiple types of posting. eg. as an attachment.
how can i send file?
@rasperepodvipodvert,
you should update data to send
https://api.slack.com/docs/message-attachments
Fantastic
how can i send file?
Maybe put a file on s3 and send it as link. Could be a quick solution :)
On OS X the BSD version of cut complains:
cut: illegal option -- -
If you replace L43 with this one, then it would support both BSD and GNU cut:
APP_SLACK_USERNAME=${APP_SLACK_USERNAME:-$(hostname | cut -d '.' -f 1)}
I try next command but didn't work:
a=123
slack '${a}'
I expected the output 123, but the output was ${a}
@jotabf, it doesn't in this bash in this way for single quotes. It should be in double quotes or whithout ones (in case a value doesn't have spaces, it can be tricky for arguments.)
@siso, fixed. Thanks for this note.
Hello All,
Could anyone help me please to get emails on outlook for specific slack channels with some specific content like "failures"
and that should trigger twice a day at some specific timings.
Thanks in Advance
@Lalit-1219, it's not about this script definitely. ;)
You may try to adjust nofication settings. I remember there is "keywords" feature.
hi @andkirby
I want to ask, why can I sent from grep command?
my sh script like this :
#!/bin/bash
message=$(grep AUDIT audit.txt)
slack ${message}
if I execute this, I always get this error:
/home/ubuntu# ./test_sent.sh
Sending to ...
invalid_payload
can you solve this?
Hi @farisalfa,
The only one who can solve it that's you. ;)
I guess, that's not about script but about Bash scripting knowledge.
Just double checked β it works fine. Think about double quotes for your variable.
Thanks bro', u saved my night ππ»
Just an insight to those facing issues with /usr/bin/slack due to permission accessing to /usr/bin, you can move the script under usr/local/bin/slack.
So that the two commands to run will be:
curl -s https://gist.github.com/andkirby/67a774513215d7ba06384186dd441d9e/raw --output /usr/local/bin/slack
chmod +x /usr/local/bin/slack
hope it helps π
great script @andkirby πͺ
Hi,
when sending a message in this way:
slack.sh ":arrow_right: data seeding"
emoji appears as text and it is not rendered, what am I doing wrong ?
Thanks!
emoji appears as text and it is not rendered, what am I doing wrong ?
@jmhostalet, I assume, they added mrkdwn type for that.
https://api.slack.com/reference/surfaces/formatting#basics
great script @andkirby πͺ
@d4r1091, it's a pleasure to know it. ;)
@jmhostalet, just double check it. It works with emoji. According to off-docs mrkdwn=true always.
hi @andkirby
I want to ask, why can I sent from grep command?
my sh script like this :
#!/bin/bash
message=$(grep AUDIT audit.txt)
slack ${message}if I execute this, I always get this error:
/home/ubuntu# ./test_sent.sh
Sending to ...
invalid_payloadcan you solve this?

I hacked a little bit the last part to:
In that way less code and not search in the folder. Also I removed the line 100 because I changed the script name to
slack-message