Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- require 'net/ssh'
- class Net::SSH::Connection::Session
- class Result < Struct.new(:stdout, :stderr, :exit_status, :exit_signal)
- def success?
- exit_status == 0
- end
- end
- def execute command
- result = Result.new("", "", nil, nil)
- open_channel do |channel|
- escaped_command = command.gsub(/'/,%{'"'"'})
- channel.exec(%{bash -lc '#{escaped_command}'}) do |ch, success|
- raise "Could not execute command: #{command.inspect}" unless success
- channel.on_data{ |ch, data| result.stdout += data }
- channel.on_extended_data{ |ch, type, data| result.stderr += data }
- channel.on_request("exit-status"){ |ch, data| result.exit_status = data.read_long }
- channel.on_request("exit-signal"){ |ch, data| result.exit_signal = data.read_long }
- end
- end
- loop
- result
- end
- end
Add Comment
Please, Sign In to add comment