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 脚本可以告诉它在哪个目录中吗?的主要内容,如果未能解决你的问题,请参考以下文章