如何从irb获取当前工作目录的绝对路径


273

我在Windows上运行Ruby,但不知道是否应该有所作为。我要做的就是获取当前工作目录的绝对路径。irb可能吗?显然,从脚本中可以使用File.expand_path(__FILE__)

但是从irb我尝试了以下操作,并收到“权限被拒绝”错误:

File.new(Dir.new(".").path).expand

10
问题实际上并不清楚:您要a)当前的工作目录(即Dir.pwd),还是要当前运行的脚本所在的目录(即File.dirname(__FILE__))?想象一下从ruby testdirectory/testscript.rb这里的任何其他地方(例如)调用脚本,两者将是不同的!
amenthes

1
@amenthes您声称我的问题不清楚,然后问“您是否要a。当前工作目录....”,我的问题是“我要做的就是获取当前工作目录的绝对路径...”。什么不清楚?
Dexygen 2015年

7
目前尚不清楚,因为这句话“显然是从脚本中可以使用File.expand_path(__FILE__)”--因为__FILE__的位置不同于当前工作目录(即Dir.pwd)的动物。
amenthes

2
@amenthes我以为我做了出色的工作,将问题标题中的“与irb”区分开了(问题本身中有两次),与“来自脚本”区
分开

Answers:



186

File.expand_path File.dirname(__FILE__) 将返回相对于调用此命令的文件的目录。

但是Dir.pwd返回工作目录(结果与pwd在终端中执行相同)


3
Dir.pwd等同于pwd -Pexec('pwd -L')将在终端中获得与pwd等效的命令(pwd通常是内置的bash,并且不解析符号链接)。
巴里·凯利

1
请同时查看经常被遗忘的Pathname类:ruby-doc.org/stdlib-2.1.1/libdoc/pathname/rdoc/Pathname.html
awenkhh 2014年

1
有一个问题,Dir.pwd将打印脚本运行位置的工作目录-可能不是您想要的。
布兰登2014年

是的,假设您bundle exec rspec spec在目录“ / project”中运行命令,而在文件“ spec / spec_helper.rb”中,其值 Dir.pwd仍为“ / project”。
蜂鸟


6

这将为您提供当前文件的工作目录。

File.dirname(__FILE__)

例:

current_file:“ / Users / nemrow / SITM / folder1 / folder2 / amazon.rb”

结果:“ / Users / nemrow / SITM / folder1 / folder2”


1
请注意,工作目录不得与实际文件相同。因此Dir.pwd,您的建议可能会有所不同。
Besi 2015年

4

如果要获取当前rb文件目录的完整路径,请执行以下操作:

File.expand_path('../', __FILE__)

3

通过此操作,您可以获取位于任何目录中的任何文件的绝对路径。

File.join(Dir.pwd,'some-dir','some-file-name')

这将返回

=> "/User/abc/xyz/some-dir/some-file-name"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.