【问题标题】:Ruby Net::SSH will not give result of executed commandRuby Net::SSH 不会给出执行命令的结果
【发布时间】:2013-06-05 21:12:18
【问题描述】:

这是我的代码

Net::SSH.start("XXX.upload.akamai.com", "sshacs", :keys=>["#{ENV['AKAMAI_SSH_KEY']}"]) do |mk|

channel = mk.open_channel do |ch|

ch.exec("rm filename.mp4") do |tk, success|

if success
    puts "++++++++++++ Deleted: #{success.class}"

else
    puts "------------ NOT deleted: #{success.class}"

end

end

end



end

success 始终为 True,即使我要删除的文件甚至不存在!

发生了什么事??

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 net-ssh


    【解决方案1】:

    来自Net::SSH docs for Channel#exec

    在这种情况下,成功意味着命令正在执行,而不是已经完成,...

    我想知道您是否因为它成功发送了请求而获得了成功,而 Net::SSH 并不关心该请求是否完成。它完成了它的工作,所以它是成功的。

    将它与类似的东西结合起来:on data

    channel.on_data do |ch, data|
      puts "what am i really getting back: #{data.inspect}" 
    end
    

    【讨论】:

    • 好吧,我猜到了。但是我怎么知道文件是否被删除?事实上,我怎么知道exec命令里面的任何命令执行成功并且没有错误?
    • 同一个文档谈到了回调,iirc。添加。
    • 我看不出我的代码和文档中的代码有什么区别?我已经看过那个文档了。
    • 好吧,on_data 仅在通道有一些粗壮数据时才会触发。因此,如果不调用 on_data,这似乎意味着没有问题......虽然这对我来说听起来不是最好的方法,但我找不到任何更好的解决方案或方法。谢谢你的回答。
    【解决方案2】:

    我想删除文件你应该使用 rm 命令。就这样

       ch.exec("rm filename.mp4") do |tk, success|
    

    【讨论】:

    • 很抱歉这是一个错字。我已经在 exec 中使用了 rm 命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-06
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    相关资源
    最近更新 更多