【问题标题】:How to get fileutils calls to output their actions in a Rakefile?如何让 fileutils 调用以在 Rakefile 中输出他们的操作?
【发布时间】:2012-01-12 11:36:25
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ruby unix rake rakefile


    【解决方案1】:

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

      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 选项,否则不会生成消息。

    但是,要在所有 FileUtils 方法中启用 :verbose,您只需将 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 中而不是在 1.8.6 中执行的操作。我没有检查这个,但这是我能想到的唯一解释。


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

    Rake::FileUtilsExt.verbose(true)
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多