ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

File.new(Dir.new(".").path).expand
这个问题实际上并不清楚:您想要 a) 当前工作目录(即 Dir.pwd)还是想要当前运行脚本所在的目录(即 File.dirname(__FILE__))?想象一下,在这里从其他任何地方(如 ruby testdirectory/testscript.rb)调用脚本,两者会有所不同!
@amenthes你声称我的问题不清楚,然后问“你想要a)当前的工作目录......”我的问题是“我想要做的就是获取当前工作目录的绝对路径......”。有什么不清楚的?
由于“显然从脚本中可以使用 File.expand_path(__FILE__)”这句话不清楚,因为 __FILE__ 的位置与当前工作目录(即 Dir.pwd)不同。
@amenthes我认为我在区分问题标题中的“与irb”(问题本身中的两次)与“来自脚本”方面做得很好
问题非常不清楚的原因是即使在脚本中File.expand_path(__FILE__) 也不会“获取当前工作目录的绝对路径”。

u
user85509

Dir.pwd 似乎可以解决问题。

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


注意:这返回当前文件的位置。为此,请参阅下面的答案。这只会返回调用脚本的 shell 的当前工作目录(就像 pwd),它可能与脚本文件所在的位置完全不同。
@GDP2 它完全符合我的要求:“获取当前工作目录的绝对路径”。
@Dexygen 这对你来说很好。我有一个不同的用例场景,所以我为自己和其他可能面临同样问题的人做了一个记录。正如您从以下答案的赞成票中看到的那样,还有近 200 人(至少)也有同样的问题。
B
BeMathis

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

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


Dir.pwd 等同于 pwd -Pexec('pwd -L') 将在终端中获得等效的 pwd(pwd 通常是 bash 内置的,并且不解析符号链接)。
另请查看经常被遗忘的 Pathname 类:ruby-doc.org/stdlib-2.1.1/libdoc/pathname/rdoc/Pathname.html
有一个问题,Dir.pwd 将打印运行脚本的工作目录——这可能不是你想要的。
是的,假设您在目录“/project”中运行命令 bundle exec rspec spec,而在文件“spec/spec_helper.rb”中,Dir.pwd 的值仍将是“/project”。
J
José Andias

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

__dir__

所以这基本上是一样的

File.dirname(__FILE__)

正如@Brandon 所说,这将打印运行脚本的工作目录。
J
Jordan Rumpelstiltskin Nemrow

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

File.dirname(__FILE__)

例子:

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

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


请注意,工作目录不能与实际文件相同。因此,Dir.pwd 和您的建议可能会有所不同。
y
yeshwant singh

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

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

这将返回

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

C
Châu Hồng Lĩnh

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

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