Gruntfile.coffeeで任意のシェルのタスクを登録するサンプル
# in gruntfile.coffee
{exec} = require('child_process')
runCommand = (exp, done) ->
exec exp, (error, stdout, stderr) ->
return done(true) if error or stderr
done(false,stdout)
grunt.registerMultiTask 'test', 'test command', ->
conf = @
done = conf.async()
runCommand 'ls -l', (error, ret) =>
if error
grunt.log.writeln('error')
return done(false)
grunt.log.writeln('done);
done(true)
同様のことをする grunt-execというのがすでにあります
jharding/grunt-exec · GitHub https://github.com/jharding/grunt-exec
ただ、このイディオムを覚えておくと任意のJSオブジェクトをインポートしたり、fsで制御したりできるので便利です