5

I am playing around with GitHub's Hubot, and I try to execute a bash script inside my robot work.
I succeed executing my script, but cannot get it working if I add some arguments to this script.

{ spawn } = require 'child_process'
s = spawn './myScript.sh' + " url" + " title"     <------- doesn't work due to args
s = spawn './myScript.sh'                         <------- alright without args
s.stdout.on 'data', ( data ) -> console.log "Output: #{ data }"
s.stderr.on 'data', ( data ) -> console.error "Error: #{ data }"
s.on 'close', -> console.log "'s' has finished executing."

How do I pass arguments to my script ?
Thanks for help

eouti
  • 5,338
  • 3
  • 34
  • 42
  • You could say `spawn "./myScript.sh #{url} #{title}"` but that would leave you open to all sorts of unpleasant quoting and injection problems. Never ever use the single argument form of `spawn`, `system`, or similar "launch a shell to do things for me" commands, there's almost always a multi-argument form that bypasses the shell completely. Aurélien's answer is the right way. – mu is too short Feb 17 '14 at 14:18

1 Answers1

8

As explained in the documentation:

http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options

Spawn take, as second parameter, an array made of your different arguments. It would look like this:

s = spawn './myScript.sh', [url, title]
Aurélien Thieriot
  • 5,853
  • 2
  • 24
  • 25