0

我正在尝试使用以下代码列出远程机器的文件。

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 命令返回的数据将被截断,并且只返回文件的部分列表。在我看来,有一个大小限制。任何人都知道我可以如何增加它?

4

1 回答 1

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
于 2012-05-08T10:10:20.983 回答