我在 Windows 上运行 Ruby,但我不知道这是否会有所作为。我要做的就是获取当前工作目录的绝对路径。这可能来自irb吗?显然从脚本中可以使用 File.expand_path(__FILE__)
但是从 irb 我尝试了以下操作并收到“权限被拒绝”错误:
File.new(Dir.new(".").path).expand
Dir.pwd
)还是想要当前运行脚本所在的目录(即 File.dirname(__FILE__)
)?想象一下,在这里从其他任何地方(如 ruby testdirectory/testscript.rb
)调用脚本,两者会有所不同!
File.expand_path(__FILE__)
”这句话不清楚,因为 __FILE__
的位置与当前工作目录(即 Dir.pwd
)不同。
File.expand_path(__FILE__)
也不会“获取当前工作目录的绝对路径”。
File.expand_path File.dirname(__FILE__)
将返回与调用此命令的文件相关的目录。
但 Dir.pwd
返回工作目录(结果与在终端中执行 pwd
相同)
Dir.pwd
等同于 pwd -P
。 exec('pwd -L')
将在终端中获得等效的 pwd(pwd 通常是 bash 内置的,并且不解析符号链接)。
bundle exec rspec spec
,而在文件“spec/spec_helper.rb”中,Dir.pwd
的值仍将是“/project”。
至于相对于当前执行脚本的路径,从 Ruby 2.0 开始也可以使用
__dir__
所以这基本上是一样的
File.dirname(__FILE__)
这将为您提供当前文件的工作目录。
File.dirname(__FILE__)
例子:
current_file: "/Users/nemrow/SITM/folder1/folder2/amazon.rb"
结果:“/Users/nemrow/SITM/folder1/folder2”
Dir.pwd
和您的建议可能会有所不同。
通过这个,您可以获得位于任何目录中的任何文件的绝对路径。
File.join(Dir.pwd,'some-dir','some-file-name')
这将返回
=> "/User/abc/xyz/some-dir/some-file-name"
如果要获取当前rb文件所在目录的完整路径:
File.expand_path('../', __FILE__)
不定期副业成功案例分享
pwd
),它可能与脚本文件所在的位置完全不同。