Подтвердить что ты не робот

Как захватить вывод из удаленной команды в Capistrano?

Я хочу запустить удаленную команду (git diff of current_revision и HEAD в нескольких папках) и захватить вывод.

Я попытался запустить ( "git diff rev1 rev2 - folder | cat" ), но метод всегда возвращает, кажется, возвращает nil (даже когда я могу видеть выход diff в выходе Capistrano).

Любые идеи? Могу ли я использовать разные способы подачи команды или что-то в этом роде? Я не мастер Unix, так что это может быть что-то тривиальное. Im здесь отсутствует.

4b9b3361

Ответ 2

Если вы хотите захватить вывод нескольких хостов, используйте run с блоком: например:

 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