【发布时间】:2011-01-13 11:37:29
【问题描述】:
受“Getting the source directory of a Bash script from within”的启发,Ruby 的实现方式是什么?
【问题讨论】:
标签: ruby scripting path directory environment-variables
受“Getting the source directory of a Bash script from within”的启发,Ruby 的实现方式是什么?
【问题讨论】:
标签: ruby scripting path directory environment-variables
对于较新版本的 Ruby,请尝试:
__dir__对于旧版本的 Ruby (
File.dirname(__FILE__) - 相对路径;或File.expand_path(File.dirname(__FILE__)) - 绝对路径。注意:即使在调用Dir.chdir 之后,使用__dir__ 也会返回脚本路径;而使用旧语法可能不会返回脚本的路径。
【讨论】:
__dir__
从 Ruby 2.0 开始,__dir__ 是获得此功能的最简单方法。它
返回文件目录的规范化绝对路径 从中调用此方法。
请参阅__dir__ 文档和“Why is __FILE__ uppercase and __dir__ lowercase?”。
【讨论】:
__dir__ 是正确答案之外,感谢您还链接到大写与小写的区别,这也是我找到它后的第一个问题 :)
使用__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
【讨论】:
ENV["PWD"] 在 Linux 下对我来说似乎是最简单的方法。我不知道与操作系统无关的方式。
【讨论】: