class Launchy::Runner

Public Instance Methods

commandline_normalize( cmdline ) click to toggle source
# File lib/launchy/runner.rb, line 39
def commandline_normalize( cmdline )
  c = cmdline.flatten!
  c = c.find_all { |a| (not a.nil?) and ( a.size > 0 ) }
  Launchy.log "commandline_normalized => #{c.join(' ')}"
  return c
end
dry_run( cmd, *args ) click to toggle source
# File lib/launchy/runner.rb, line 24
def dry_run( cmd, *args )
  shell_commands(cmd, args).join(" ")
end
run( cmd, *args ) click to toggle source
# File lib/launchy/runner.rb, line 4
def run( cmd, *args )
  raise Launchy::CommandNotFoundError, "No command found to run with args '#{args.join(' ')}'. If this is unexpected, #{Launchy.bug_report_message}" unless cmd
  if Launchy.dry_run? then
    $stdout.puts dry_run( cmd, *args )
  else
    wet_run( cmd, *args )
  end
end
shell_commands( cmd, args ) click to toggle source

cut it down to just the shell commands that will be passed to exec or posix_spawn. The cmd argument is split according to shell rules and the args are not escaped because the whole set is passed to system as *args and in that case system shell escaping rules are not done.

# File lib/launchy/runner.rb, line 33
def shell_commands( cmd, args )
  cmdline = [ cmd.to_s.shellsplit ]
  cmdline << args.flatten.collect{ |a| a.to_s }
  return commandline_normalize( cmdline )
end
wet_run( cmd, *args ) click to toggle source
# File lib/launchy/runner.rb, line 13
def wet_run( cmd, *args )
  argv = [ cmd, *args ].flatten
  Launchy.log "ChildProcess: argv => #{argv.inspect}"
  process = ChildProcess.build( *argv )

  process.io.inherit!
  process.leader = true
  process.detach = true
  process.start
end