hubotで外部コマンドを使いたい。外部コマンドにパイプで入力値を流しこみたい。CoffeeScriptを書くのははじめてなのであまり良い方法ではないかもしれない。覚え書きだ。
例として標準出力の1行目を逆にしたものを出力とする外部コマンド
% ghc -e 'interact $ reverse . head . lines'
を使っている。この部分を自分の好きな外部コマンドに置き換えれば良い。
reverse.coffee
spawn = require('child_process').spawn
module.exports = (robot) -> robot.hear /reverse/i, (msg) ->
echo = spawn 'echo', [msg.message]
reverse = spawn 'ghc', ['-e', 'interact $ reverse . head . lines']
echo.stdout.on 'data', (data) -> reverse.stdin.write(data)
reverse.stdout.on 'data', (data) -> msg.send data.toString()