From: Guillermo Riojas Date: 2010-11-27T02:17:14+09:00 Subject: Net::SSH.exec Using the "exec" method interactively Hi there, Recently i started playing with the Net::SSH gem. So far, good, but i just came across i question i haven't been able to respond. My intention is to issue several commands using the same channel in order to be able to give continuity to my list of instructions, making it somehow "interactive". So far, after the first command is typed and the output returned, the rest of the instructions seem to be "not executed". As i am pretty new to the gem and SSH in general, i realized that somehow once the channel is closed the session too and of course, opening a new channel puts me back in the starting point. So if i would like to create folder, navigate to the folder i just created , do some other stuff there and then exit, wont work as i expect, because every command sent starts in a new session. A sample of the code here: def exec_cmd cont = true channel = @ssh.open_channel do |chn| while cont print "cmd> "; STDOUT.flush; str = gets.chop #User input command cont = false if str.empty? channel_execute chn, str.to_s end end #channel open loop channel.wait end def channel_execute(chn, cmd = nil) return nil if cmd.nil? puts "Executing Command [#{cmd}]" chn.exec(cmd.to_s) do |ch,success| raise "Could not execute command" unless success ch.on_data do |c, data| out = data.split("\n") out.each do |e| puts "#{e}" end end ch.on_extended_data do |c, type, data| out = data.split("\n") out.each do |e| puts "#{e}" end end ch.on_close { @log.debug("exec") {"Command loop finished."} } end #chn exec loop chn.wait end Now, my first work around is sending once the list of all the commands, in this way "mkdir testfolder; cd testfolder; mkdir testfolder2; cd /; ..." However, is there any way i can keep the channel "open" in order to be able to send each and every command separately? Any hint is greatly appreaciated. guillermo -- Posted via http://www.ruby-forum.com/.