.execute
Net-SSH-Shellのメソッドから stdout を取得するにはどうすればよいですか
古き良き 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>
使用できる変数に標準出力が必要であり、実際のステートフル ログイン シェルが必要です。
何か案は?
編集
@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
、コマンドが結果を返すことがわかっている場合でも、常に空です。