受"在Bash脚本中获取源目录"的启发,有没有Ruby的方法来实现这个功能?
对于较新版本的 Ruby,请尝试:
__dir__
对于旧版本的 Ruby(< 2.0),可以使用以下方法找到正在运行的脚本:
File.dirname(__FILE__)
- 相对路径;或者File.expand_path(File.dirname(__FILE__))
- 绝对路径。注意:使用__dir__
将在调用Dir.chdir
后返回脚本路径,而使用旧语法可能无法返回脚本路径。
__dir__
从 Ruby 2.0 开始,__dir__
是获取当前目录的最简单方法。
返回调用该方法所在文件的目录的规范化绝对路径。
请参阅 __dir__
文档以及 "为什么 __FILE__ 大写而 __dir__ 小写?"。
__dir__
是正确的答案外,感谢您还提供了大小写差异的链接,这也是我在找到它后的第一个问题 :) - SidOfc使用 __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
在Linux下,ENV["PWD"]似乎是我最简单的方式。我不知道是否有跨操作系统的方法。
systemd
分叉的服务根本不包含此变量。 - iBug