如何从.execute
Net-SSH-Shell 中的方法获取标准输出
使用好的 'ol Net-SSH,这很容易
Net::SSH.start('host','user') do |ssh|
puts ssh.exec! 'date'
end
给我Tue Jun 19 23:43:53 EDT 2012
但是如果我尝试使用外壳,我会得到一个进程对象
Net::SSH.start('host','user') do |ssh|
ssh.shell do |bash|
output = bash.execute! 'ls'
puts output
end
end
给我#<Net::SSH::Shell::Process:0x007fc809b541d0>
我在稀疏文档中找不到任何关于如何轻松获得标准的内容。有方法,但是如果我使用该方法on_output
,那似乎对我没有任何作用execute!
我也试过传递一个块来.execute!
喜欢
bash.execute! 'ls' do |output|
puts output
end
但我仍然得到一个过程#<Net::SSH::Shell::Process:0x007fc809b541d0>
我需要一个可以使用的变量中的标准输出,并且我需要一个实际的有状态登录 shell,据我所知,准系统 Net-SSH 并没有这样做。
有任何想法吗?
编辑
按照@vikhyat的建议的相同想法,我尝试了
ssh.shell do |bash|
process = bash.execute! 'ls' do |a,b|
# a is the process itself, b is the output
puts [a,b]
output = b
end
end
但是b
总是空的,即使我知道命令返回结果。