我有一个程序存在于/ usr / local / flower目录下 – flower.rb。 它需要加载也存在于相同目录中的库。 我已经将这个花目录包含在我的操作系统环境的path中。 而我select的操作系统是Ubuntu。
当我从/ usr / local / flower以外的任何其他目录执行flower.rb时,会收到错误消息,指出程序无法加载它们所在的/ usr / local / flower目录中存在的库从源代码加载为./[library]。
我意识到我可以改变Ruby程序来硬编码/ usr / local / flower / [libraries],但是我很好奇是否有办法从我的主目录执行这个程序,例如/ home / seattle,w / o这样做。
另外,程序执行时,通过-o开关创build输出。
我的解决scheme是创build一个bash脚本,更改为/ usr / local / flower目录,执行程序,然后返回到调用flower.rb程序的PWD目录。 问题是-o开关。 如果我做了一个-o [文件],将[file]写入/ usr / local / flower目录,而不是在运行flower.rb程序时的位置。
什么是这个问题的一个很好的解决scheme?
从你的问题来看,这不是很清楚,但似乎你错误地使用了require
。 require
是从$LOAD_PATH
加载脚本。 如果要加载相对于当前脚本目录的脚本,请使用require_relative
。
您不应该加载相对于当前工作目录的脚本。 当前的工作目录是在用户的控制下,而不是你的脚本。 你不知道它会是什么。 有一个原因,为什么当前的工作目录在2008年从$LOAD_PATH
中删除:因为它已经损坏。