1

我有一个 Rakefile,在我自己构建的 Ruby 1.9.3 安装中,当我使用 FileUtils等方法时cp,它可以正确输出等效的 Unix shell。mkdir

但是,在 Mac OS X(特别是 10.5)附带的 1.8.6 版本的 Ruby 上,他们不这样做。

我希望他们在执行命令时输出命令。有没有办法在 OS X 的 1.8.6 Ruby 中启用此功能,而不是添加:verbose => true到每个调用中?(这甚至可能不起作用。)

有问题的 Rakefile 是:https ://github.com/dpkendal/tools-osx/blob/master/Rakefile

4

1 回答 1

1

那没有意义。1.9.3 不应该这样做:verbose,除非明确告知这样做。您可以查看mkdir1.9.3 lib 中的实现,例如:

  def mkdir(list, options = {})
    fu_check_options options, OPT_TABLE['mkdir']
    list = fu_list(list)
    fu_output_message "mkdir #{options[:mode] ? ('-m %03o ' % options[:mode]) : ''}#{list.join ' '}" if options[:verbose]
    return if options[:noop]

    list.each do |dir|
      fu_mkdir dir, options[:mode]
    end
  end

:verbose在那里您可以看到除非明确提供该选项,否则不会生成消息。

但是,要启用:verbose所有FileUtils方法,您可以简单地include FileUtils::Verbose进入您的命名空间。这适用于 1.8 和 1.9 ruby​​:

irb(main):001:0> RUBY_VERSION
=> "1.8.7"
irb(main):002:0> include FileUtils::Verbose
=> Object
irb(main):003:0> mkdir 'fooof'
mkdir fooof
=> ["fooof"]

顺便说一句,可能是 Rake 在 1.9.3 中已经这样做了,这可以解释为什么它在 1.9.3 中而不是在 1.8.6 中这样做。我没有检查这个,但这是我能想到的唯一解释。


Rake 提供了自己的 FileUtils 扩展,称为Rake::FileUtilsExt. 这个模块有一个verbose标志。要激活它,只需将其添加到 Rakefile 的顶部:

Rake::FileUtilsExt.verbose(true)
于 2012-01-12T14:33:42.560 回答