我有一个存在于/ usr / local / flower目录中的程序 - flower.rb。它需要加载也存在于同一目录中的库。我在我的OS环境路径中包含了这个花目录。我选择的操作系统是Ubuntu。
当我从/ usr / local / flower以外的任何其他目录执行flower.rb时,我收到错误消息,指出程序无法加载/ usr / local / flower目录中存在的库b / c它们从源代码加载为./ [library]。
我意识到我可以将Ruby程序改为硬编码/ usr / local / flower / [libraries],但我很好奇是否有办法从我的主目录执行这个程序,例如/ home / seattle,没有这样做。
此外,程序执行时,它通过-o开关创建输出。
我的解决方案是创建一个bash脚本,该脚本更改为/ usr / local / flower目录,执行该程序,然后返回到调用flower.rb程序的PWD目录。问题是-o开关。如果我执行-o [file],[file]将被写入/ usr / local / flower目录,而不是我运行flower.rb程序时的位置。
这个问题的解决方案是什么?
答案 0 :(得分:3)
您的问题并不十分清楚,但您似乎错误地使用了require
。 require
用于从$LOAD_PATH
加载脚本。如果要加载相对于当前脚本目录的脚本,请使用require_relative
。
您应该从不加载相对于当前工作目录的脚本。当前工作目录由用户控制,而不是您的脚本。你不知道它会是什么。有一个原因可以解释为什么当前的工作目录已经从2008年的$LOAD_PATH
中移除了:因为它已经坏了。