標準入力の内容をチャットに投稿する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