模块 FileUtils
常量
- LN_SUPPORTED
- RUBY
当前运行的 Ruby 程序的路径
公共实例方法
ruby(*args, **options, &block) 点击切换源代码
使用给定的参数运行 Ruby 解释器。
示例
ruby %{-pe '$_.upcase!' <README}
# File rake-13.2.1/lib/rake/file_utils.rb, line 98 def ruby(*args, **options, &block) if args.length > 1 sh(RUBY, *args, **options, &block) else sh("#{RUBY} #{args.first}", **options, &block) end end
safe_ln(*args, **options) 点击切换源代码
尝试执行正常的软链接,但如果链接失败则回退到复制。
# File rake-13.2.1/lib/rake/file_utils.rb, line 110 def safe_ln(*args, **options) if LN_SUPPORTED[0] begin return options.empty? ? ln(*args) : ln(*args, **options) rescue StandardError, NotImplementedError LN_SUPPORTED[0] = false end end options.empty? ? cp(*args) : cp(*args, **options) end
sh(*cmd, &block) 点击切换源代码
运行系统命令 cmd
。如果给出了多个参数,则直接运行命令(不通过 shell,与 Kernel::exec 和 Kernel::system 相同的语义)。
建议您使用多参数形式,而不是插值用户输入,这出于可用性和安全性的考虑。使用多参数形式,您可以轻松处理包含空格或其他 shell 保留字符的文件。使用多参数形式,您的 rake 任务不会容易受到用户提供类似 ; rm # -rf /
这样的参数的影响。
如果给出了块,则在命令完成后,将使用 OK 标志(在零退出状态时为 true)和一个 Process::Status 对象来调用该块。如果没有块,则当命令以非零退出时,会引发 RuntimeError。
示例
sh 'ls -ltr' sh 'ls', 'file with spaces' # check exit status after command runs sh %{grep pattern file} do |ok, res| if !ok puts "pattern not found (status = #{res.exitstatus})" end end
# File rake-13.2.1/lib/rake/file_utils.rb, line 43 def sh(*cmd, &block) options = (Hash === cmd.last) ? cmd.pop : {} shell_runner = block_given? ? block : create_shell_runner(cmd) set_verbose_option(options) verbose = options.delete :verbose noop = options.delete(:noop) || Rake::FileUtilsExt.nowrite_flag Rake.rake_output_message sh_show_command cmd if verbose unless noop res = (Hash === cmd.last) ? system(*cmd) : system(*cmd, options) status = $? status = Rake::PseudoStatus.new(1) if !res && status.nil? shell_runner.call(res, status) end end
split_all(path) 点击切换源代码
将文件路径拆分为各个目录名称。
示例
split_all("a/b/c") => ['a', 'b', 'c']
# File rake-13.2.1/lib/rake/file_utils.rb, line 126 def split_all(path) head, tail = File.split(path) return [tail] if head == "." || tail == "/" return [head, tail] if head == "/" return split_all(head) + [tail] end