2011-01-18 9 views
24

Voglio eseguire un comando remoto (git diff di current_revision e HEAD in alcune cartelle) e catturare l'output.Come acquisire l'output da un comando remoto in Capistrano?

Ho provato a eseguire ("git diff rev1 rev2 - cartella | cat"), ma il metodo restituisce sempre sembra restituire nil (anche quando posso vedere l'output diff nell'output di Capistrano).

Qualche idea? Posso usare diversi mezzi per eseguire il piping del comando, o qualcosa del genere? Non sono un mago Unix, quindi potrebbe essere qualcosa di banale che mi manca qui.

risposta

5

Se si desidera catturare l'output di più host, utilizzare Esegui con un blocco: per esempio:

desc "capture output from multiple servers" 
    task :capture_multiple_servers, :roles => [:some_servers] do 
    results = {} 
    run "hostname --fqdn" do |channel, stream, data| 
     if stream == :out 
     results[channel[:host]] = [] unless results.key?(channel[:host]) 
     results[channel[:host]] << data if stream == :out 
     end 
    end 
    puts "Your results were:" 
    results.keys.sort.each do | host | 
     puts "#{host}:#{results[host].join}" 
    end 
    end 
Problemi correlati