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

问题描述:

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

一个脚本这是可能的,但是从IRB我尝试以下,并得到了“Permission denied”错误:

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

现在的问题是实际上没有清楚:你想一)当前工作目录(这是'Dir.pwd'),或者你想要的目录,目前正在运行脚本(它是'File.dirname(__ FILE __)')?想象一下,在其他任何地方调用脚本(比如'ruby testdirectory/testscript.rb'),这两者将会不同! – amenthes 2015-03-22 21:13:51

+1

@amenthes您声称我的问题不清楚,然后问“你想要一个)当前的工作目录....”和我的问题状态“我想要做的就是获取*当前工作目录的*绝对路径... ”。什么不清楚? – 2015-07-18 23:57:51

+4

由于“很明显从脚本中可以使用'File.expand_path(__ FILE __)'” - 因为'__FILE__'的位置与当前工作目录(它是'Dir.pwd')是不同的动物。 – amenthes 2015-07-19 09:06:17

Dir.pwd似乎这样的伎俩。

http://ruby-doc.org/core/Dir.html#method-c-pwd

File.expand_path File.dirname(__FILE__)将返回相对于这个命令是从所谓的文件目录。

Dir.pwd返回工作目录(结果等同于你的终端执行pwd

+2

“Dir.pwd”等同于'pwd -P'。'exec('pwd -L')'将在终端中获得相当于pwd的值(pwd通常是bash内建的,并且不会解析符号链接)。 – 2014-01-26 03:27:09

+1

请看看经常被遗忘的Pathname类:http://www.ruby-doc.org/stdlib-2.1.1/libdoc/pathname/rdoc/Pathname.html – awenkhh 2014-06-27 19:26:19

+0

有一个问题,Dir.pwd会打印运行脚本的工作目录 - 这可能不是你想要的。 – Brandon 2014-10-13 20:24:59

这会给你当前文件的工作目录。

File.dirname(__FILE__) 

实施例:

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

结果: “/用户/ nemrow/SITM/folder1中/文件夹2”

+0

请注意,工作目录不能与实际文件相同。所以'Dir.pwd'和你的建议可能会有所不同。 – Besi 2015-02-02 13:41:59

至于相对于当前正在执行脚本的路径,因为红宝石2.0你也可以使用

__dir__ 

因此,这是基本相同

File.dirname(__FILE__) 
+8

我不知道为什么不一致,为什么不用'__DIR__'? – Zequez 2015-09-19 01:16:18

+11

@Zequez因为['__FILE__'是一个常量,但'__dir__'是一种方法](http://*.com/a/15190725/405017)。 – Phrogz 2016-01-03 16:50:38

+0

这将打印@Brandon所说的脚本的运行目录。 – 2016-06-03 03:17:57

如果你想获得当前的RB文件的目录的完整路径:

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

通过这个,你可以得到的任何绝对路径文件位于任何目录中。

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

这将返回

=> "/User/abc/xyz/some-dir/some-file-name"