-
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 | |
| #################################################################################### | |
| # Slack Bash console script for sending messages. | |
| #################################################################################### | |
| # Installation | |
| # $ curl -s https://gist.githubusercontent.com/andkirby/67a774513215d7ba06384186dd441d9e/raw --output /usr/bin/slack | |
| # $ chmod +x /usr/bin/slack | |
| #################################################################################### | |
| # USAGE | |
| # Send message to slack channel/user | |
| # Send a message to the channel #ch-01 | |
| # $ slack '#ch-01' 'Some message here.' | |
| # | |
| # Send a message to the channel #ch-01 and user @me. | |
| # $ slack '#ch-01,@me' MESSAGE | |
| # | |
| # Send a message to the default channel (it must be declared in APP_SLACK_CHANNEL). | |
| # $ slack MESSAGE | |
| # | |
| # VARIABLES | |
| # | |
| # Please declare environment variables: | |
| # - APP_SLACK_WEBHOOK | |
| # - APP_SLACK_CHANNEL (optional) | |
| # - APP_SLACK_USERNAME (optional) | |
| # - APP_SLACK_ICON_EMOJI (optional) | |
| # You may also declare them in ~/.slackrc file. | |
| #################################################################################### | |
| set -o pipefail | |
| set -o errexit | |
| set -o nounset | |
| #set -o xtrace | |
| 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 -d '.' -f 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 | |
| } | |
| slack() { | |
| # 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)/.slackrc ]; then | |
| . $(cd; pwd)/.slackrc | |
| fi | |
| declare -a slack_channels | |
| init_params ${@} | |
| send_message_to_channels | |
| } | |
| if [ "${BASH_SOURCE[0]:-}" != "${0}" ]; then | |
| export -f slack | |
| else | |
| slack ${@} | |
| exit $? | |
| fi |
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.githubusercontent.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?

@Lalit-1219, it's not about this script definitely. ;)
You may try to adjust nofication settings. I remember there is "keywords" feature.