Net :: SSH.exec命令返回的数据是否有大小限制

时间:2012-05-08 09:36:34

标签: ruby ssh ls net-ssh

我正在尝试使用以下代码执行远程计算机的文件列表。

Net::SSH.start(host_name, 'ec2-user') do |ssh|
  cmd = "ls #{get_ls_command(dir_loc, extension)}"
  ssh.exec!(cmd) do |channel, stream, data|
  if stream == :stderr
    # do something -- and error has been raised. 
    # for now raise an exception 
    puts data
    raise "Error in fetching file data"
 end
 return data.split("\n")
end

如果文件数量很大,那么从exec命令返回的数据将被截断,并且只返回部分文件列表。在我看来,有一个大小限制。谁知道我怎么能增加它?

1 个答案:

答案 0 :(得分:0)

您的代码不完整,您缺少end并且有一个“错误”的缩进,它不代表实际的嵌套。但是,我会尝试使用我们的工作

该方法以块的形式产生接收到的数据。在return语句中,data实际上指向最后返回的所述数据块。这意味着如果块仅产生一次(与最多8000字节的iirc相同),则代码仅在意外工作。

为了安全地获得多个产量,您必须首先完全收集数据然后正确处理它。你可以这样做:

Net::SSH.start(host_name, 'ec2-user') do |ssh|
  cmd = "ls #{get_ls_command(dir_loc, extension)}"

  result = ""
  ssh.exec!(cmd) do |channel, stream, data|
    if stream == :stderr
      # do something -- and error has been raised. 
      # for now raise an exception 
      puts data
      raise "Error in fetching file data"
    end
    result << data
  end

 return result.split("\n")
end