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

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

【问题讨论】:

    标签: ruby scripting path directory environment-variables


    【解决方案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 想要包含脚本的目录。
      • 不,该进程可以从其他地方执行外部脚本。
      猜你喜欢
      • 1970-01-01
      • 2015-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多