Ruby 脚本可以告诉它在哪个目录中吗?

Posted

技术标签:

【中文标题】Ruby 脚本可以告诉它在哪个目录中吗?【英文标题】:Can a Ruby script tell what directory it’s in? 【发布时间】:2011-01-13 11:37:29 【问题描述】:

受“Getting the source directory of a Bash script from within”的启发,Ruby 的实现方式是什么?

【问题讨论】:

【参考方案1】:

对于较新版本的 Ruby,请尝试:

__dir__

对于旧版本的 Ruby (

File.dirname(__FILE__) - 相对路径;或 File.expand_path(File.dirname(__FILE__)) - 绝对路径。

注意:即使在调用Dir.chdir 之后,使用__dir__ 也会返回脚本路径;而使用旧语法可能不会返回脚本的路径。

【讨论】:

'File.expand_path(File.dirname(FILE))' 在查找绝对路径时很有用【参考方案2】:

使用__dir__

从 Ruby 2.0 开始,__dir__ 是获得此功能的最简单方法。它

返回文件目录的规范化绝对路径 从中调用此方法。

请参阅__dir__ 文档和“Why is __FILE__ uppercase and __dir__ lowercase?”。

【讨论】:

好吧,除了__dir__ 是正确答案之外,感谢您还链接到大写与小写的区别,这也是我找到它后的第一个问题 :)【参考方案3】:

使用__dir__

File.dirname(__FILE__) 不是获取脚本存储目录的正确方法。

开始工作目录和脚本文件所在目录是一样的,但可能会改变。

例如:

Dir.chdir('..') do
    puts __dir__
    puts File.expand_path(File.dirname(__FILE__))
end

对于存储在/Desktop/tmp 中的脚本文件,运行它会给出输出

/home/mateusz/Desktop/tmp
/home/mateusz/Desktop

【讨论】:

【参考方案4】:

ENV["PWD"] 在 Linux 下对我来说似乎是最简单的方法。我不知道与操作系统无关的方式。

【讨论】:

谢谢!对我的 Linux 特定常识很有帮助。 那是主目录,不是当前工作目录,也不是脚本所在目录。 B*gger,睡眠不足会那样做。我的意思当然是 ENV["PWD"]。但是 ba 的答案要好得多。 不就是简单的进程工作目录吗?我认为 OP 想要包含脚本的目录。 不,该进程可以从其他地方执行外部脚本。

以上是关于Ruby 脚本可以告诉它在哪个目录中吗?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用内存分配报告来分析 ruby​​ 1.9.2 脚本?

如何使用Ruby进行shell脚本编写?

你能把SBT代码放在scala脚本中吗?

我如何知道 Bash 脚本中的脚本文件名?

如何使用 Ruby 编写 shell 脚本?

ruby 用于为GitHub自述文件生成目录的脚本