Bug #4436

FileUtils verbose mode prints output to stderr

Added by jrdioko (Johnathan Ritzi) almost 10 years ago. Updated 6 months ago.

Target version:


I'm using a plugin in a Ruby on Rails application that uses FileUtils's cp_r method to copy files into place (with verbose mode on). When deploying my application with Capistrano, I get several "error" lines during this part (

It appears that FileUtils#cp_r prints all output in verbose mode to stderr, even if the output is not erroneous ( It seems that fu_output_message (and related code) should be changed so that output goes to stdout and errors go to stderr, as usual.

Updated by jeremyevans0 (Jeremy Evans) over 1 year ago

  • Backport set to 2.5: UNKNOWN, 2.6: UNKNOWN
  • ruby -v deleted (1.8.7)
  • Description updated (diff)
  • Subject changed from FileUtils#cp_r verbose mode prints output to stderr to FileUtils verbose mode prints output to stderr
  • Project changed from Ruby 1.8 to Ruby master

This was set to the Ruby 1.8 tracker, but I think it is still an issue currently for all FileUtils methods. Changing the default behavior could possibly be done in Ruby 3, and potentially we could add an option for $stdout (or another IO stream) for non-error messages in 2.7.

Updated by jeremyevans0 (Jeremy Evans) over 1 year ago

  • Target version set to 3.0

After a more thorough review, fu_output_message is only called in verbose mode. You can get the behavior you want via:

FileUtils.instance_variable_set(:@fileutils_output, $stdout)

before calling other methods on FileUtils. I think changing the default from $stderr to $stdout should be done in Ruby 3.

Updated by jeremyevans0 (Jeremy Evans) 9 months ago

I've submitted a pull request upstream for this:


Updated by jeremyevans0 (Jeremy Evans) 6 months ago

  • Status changed from Open to Closed

Also available in: Atom PDF