当Ruby脚本作为可执行文件运行时如何访问调用文件夹?

时间:2015-11-19 19:15:43

标签: ruby

我有一个.rb脚本,可以使用Dir.glob('*.txt') do |rb_file|访问和编辑同一目录中的所有.txt文件

如果我从终端ruby myscript.rb拨打电话,一切正常。

然后我制作了一个可执行文件,在Mac OS上双击启动,如thisthis所述。我使用#!/usr/bin/env ruby启动了文件,授予了权限chmod +x myscript.rb,并使用终端打开了它。

Ruby正在运行但是当我尝试访问同一目录中的文件时,脚本找不到它们。实际上,脚本会在/ Users / myname目录中查找这些文件。

如何访问双击文件所在的原始目录?

我尝试使用./但没有成功。 绝对路径不是一个选项,除非以编程方式检索。

谢谢

2 个答案:

答案 0 :(得分:0)

如果我理解你的话,无论你如何调用它,你都应该能够使用它来获取ruby脚本所在的目录。

File.dirname(File.expand_path(__FILE__))

如果我创建一个简单的脚本,只需puts上面的~/tmp/foo.rb并将其放在~/tmp $ ruby foo.rb /Users/philip/tmp ~ $ ruby tmp/foo.rb /Users/philip/tmp ~ $ ruby /Users/philip/tmp/foo.rb /Users/philip/tmp ~ $ cd / / $ ruby /Users/philip/tmp/foo.rb /Users/philip/tmp 中,这就是输出。我的提示是我当前的目录,后跟一个' $'。在每种情况下都会返回相同的值。

drawRect

答案 1 :(得分:0)

方法Kernel#__dir__返回调用__dir__所在文件的目录。(它基本等同于File.dirname ( {{3} } ( File.realpath ))。)