@peccul is peccu

(love peccu '(emacs lisp cat outdoor bicycle mac linux coffee))

標準入力の内容をチャットに投稿する1 (bash, curl版)

長時間かかるコマンドの実行結果をチャットに通知したくなったので、スクリプトを書きました。 (コマンド実行後の定型文通知や引数に指定した文字列の通知はすでに利用していたが、結果を通知したくなった)

使い方

パイプで出力を渡してください。

例:lsの内容を投稿する

$ ls | chat

スクリプト

WebHookのURLや投稿先の部屋名を修正し、chat 等適当な名前をつけて、パスを通してください。

厳密なエスケープではないので、ソースコードを渡すとcurlのエラーになったり、意図しないコマンドが実行されるかもしれません。

#!/bin/bash

HOOK_URL='https://web/hooks/url'
CHANNEL='channel-name'
ICON=':deciduous_tree:'

post() {
    local mes=$(cat - |perl -pe 's/\n/\\n/g'|perl -pe 's/"/\\"/g'|perl -pe "s/'/'\\\\''/g")
    curl -X POST --data-urlencode 'payload={"icon_emoji":"'$ICON'","text":"```'$mes'```","channel":"'$CHANNEL'"}' $HOOK_URL
}

if [ -p /dev/stdin ]; then
    cat -
else
    echo $@
fi | post

参考