加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – File.dirname令人困惑的行为

发布时间:2020-12-17 03:54:56 所属栏目:百科 来源:网络整理
导读:我使用 Ruby 1.9.3编写了几个用于系统管理的小Ruby脚本.在一个脚本中我使用: File.dirname(__FILE__) 获取脚本文件的目录.这将返回一个相对路径,但是当我从第二个脚本调用脚本时,File.dirname返回一个绝对路径. Ruby Doc在其示例中列出了绝对返回路径,而我
我使用 Ruby 1.9.3编写了几个用于系统管理的小Ruby脚本.在一个脚本中我使用:

File.dirname(__FILE__)

获取脚本文件的目录.这将返回一个相对路径,但是当我从第二个脚本调用脚本时,File.dirname返回一个绝对路径.

Ruby Doc在其示例中列出了绝对返回路径,而我在Ruby Forum上发现了一个讨论,其中用户说dirname应该只返回相对路径.

我使用Ruby Forums建议的解决方案来使用File.expand_path来始终获得如下的绝对路径:

File.expand_path(File.dirname(__FILE__))

但是有没有办法让dirname的行为保持一致?

更新:

为了扩展Janathan Cairs的答案,我制作了两个脚本:

s1.rb:

puts "External script __FILE__: #{File.dirname(__FILE__)}"

s0.rb:

puts "Local script __FILE__: #{File.dirname(__FILE__)}"
require './s1.rb'

运行./s0.rb会给出以下输出:

Local script __FILE__: .
External script __FILE__: /home/kenneth/Pictures/wp/rip_vault

解决方法

如果给定绝对路径,File.dirname应返回绝对路径,如果给定相对路径,则返回相对路径:

File.dirname('/home/jon/test.rb') # => '/home/jon'
File.dirname('test.rb') # => '.'

__FILE__返回当前脚本的名称,因此它是当前目录的相对路径.这意味着如果要使用File.dirname(__ FILE__)获取绝对路径,则应始终使用expand_path.

NB Ruby 2.0.0 introduces the __dir__ constant

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读