2014-04-14 36 views
0

由於net-ssh手冊中說「exec」方法在通道上異步執行一個命令。 http://net-ssh.github.io/ssh/v1/chapter-3.html#s6如何用ruby net ssh通道執行教程?

但是,當我希望以執行一些教官,例如:

def work(session, instructor) 
    session.open_channel do |channel| 
    channel.on_data do |ch, data| 
     puts data.strip 
    end 
    channel.exec instructor 
    end 
end 

Net::SSH.start('host') do |session| 
    work session, "touch a.file" 
    work session, "mv a.file b.file" 
    work session, "rm b.file" 
    session.loop 
end 

執行命令異步真的讓這樣的代碼無法正常工作。

有人能幫我解決這個問題嗎?

謝謝!

回答

1

使用sync shell service它,這樣做:

Net::SSH.start('localhost') do |session| 
    shell = session.shell.sync 
    shell.touch 'a.file' 
    shell.mv 'a.file', 'b.file' 
    shell.send_command("rm", 'b.file') 
    shell.exit 
end 

或者只是組織的命令上-A線:

work session, "touch a.file; mv a.file b.file; rm b.file" 
+0

如果我想給exec命令不是一個基本的shell命令?我認爲第二種方式是可以的。但目前還不清楚我的命令是否很長。謝謝。 – wonderflow

+0

@wonderflow文件說不是shell只是bash,我相信這只是默認的刪除shell。 –

+0

@МалъСкрылевъ - 我有一個與ssh連接狀態有關的小問題。請幫助我 - https://stackoverflow.com/questions/28799593/unix-commands-work-on-server-but-not-in-ruby-ssh-session謝謝。 – james