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

Geo*_*pty 262 ruby irb working-directory

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

但是从irb我尝试了以下内容并得到了"Permission denied"错误:

File.new(Dir.new(".").path).expand
Run Code Online (Sandbox Code Playgroud)

use*_*509 490

Dir.pwd 似乎可以做到这一点.

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

  • 注意:这**不**返回当前文件的位置。为此,请参阅下面的答案。这仅返回调用脚本的 shell 的当前工作目录(就像“pwd”),该目录可能与脚本文件所在的位置完全不同。 (3认同)
  • @GDP2它完全符合我的要求:“获取当前工作目录的绝对路径”。 (2认同)

Psy*_*one 179

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

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

  • `Dir.pwd`相当于`pwd -P`.`exec('pwd -L')`将在终端中获得相当于pwd的值(pwd通常是bash内置的,并且不解析符号链接). (3认同)

udo*_*udo 56

至于相对于当前执行脚本的路径,从Ruby 2.0开始也可以使用

__dir__
Run Code Online (Sandbox Code Playgroud)

所以这基本上是一样的

File.dirname(__FILE__)
Run Code Online (Sandbox Code Playgroud)

  • @Zequez因为[`__FILE__`是常量,但`__dir__`是一种方法](http://stackoverflow.com/a/15190725/405017). (13认同)
  • 我想知道为什么不一致,为什么不`__DIR__`? (9认同)

Jor*_*row 6

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

File.dirname(__FILE__)
Run Code Online (Sandbox Code Playgroud)

例子:

current_file: "/Users/nemrow/SITM/folder1/folder2/amazon.rb"

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


小智 6

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

File.join(Dir.pwd,'some-dir','some-file-name')
Run Code Online (Sandbox Code Playgroud)

这将返回

=> "/User/abc/xyz/some-dir/some-file-name"
Run Code Online (Sandbox Code Playgroud)


Châ*_*ĩnh 5

如果要获取当前 rb 文件所在目录的完整路径:

File.expand_path('../', __FILE__)
Run Code Online (Sandbox Code Playgroud)