Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby:如何在chdir之后获得源文件的正确完整路径?_Ruby_Path_Chdir - Fatal编程技术网

Ruby:如何在chdir之后获得源文件的正确完整路径?

Ruby:如何在chdir之后获得源文件的正确完整路径?,ruby,path,chdir,Ruby,Path,Chdir,请参见以下示例: puts __FILE__ #test.rb puts File.expand_path(__FILE__) #C:/TEMP/test.rb Dir.chdir('..') puts __FILE__ #test.rb puts File.expand_path(__FILE__) #C:/test.rb 在(全局)chdir之后,exp

请参见以下示例:

puts __FILE__                           #test.rb
puts File.expand_path(__FILE__)         #C:/TEMP/test.rb

Dir.chdir('..')
puts __FILE__                           #test.rb
puts File.expand_path(__FILE__)         #C:/test.rb
在(全局)
chdir
之后,
expand\u路径
返回错误的结果

如何获得正确的结果?

我试图使用
文件的第二个参数。展开\u path

puts File.expand_path(__FILE__, 'temp') #C:/TEMP/test.rb
puts File.expand_path(__FILE__, 'c:/temp') #C:/TEMP/test.rb
但是要使用它,我必须知道
\uuuu文件的路径

命令
require\u relative
似乎忽略了所有
chdir
-操作。所以我希望,有一种方法可以获得文件的“真实”目录

备注:

  • 我知道——对于我的特定任务,我不能使用它
  • 我的实际解决方案是:我在更改目录之前存储完整路径(我也可以在更改目录之前存储
    Dir.pwd

\uuuuu文件\uuuuuu
内置是
String
类的一个实例:

puts __FILE__.class 
# ⇒ String
这意味着你不应该期望它有任何巫毒魔法。它存储相对路径,此文件加载于

ruby C:\TEMP\test.rb        # ⇒ __FILE__ == 'C:\TEMP\test.rb'
cd C:\TEMP && ruby test.rb  # ⇒ __FILE__ == 'test.rb'

ruby 2.0中有一个新内置的
\uuuu dir\uuuu
。它看起来像是您正在寻找的,以防
2.0
-您可以选择唯一的解决方案。

不了解预期的输出是什么。。你能帮忙吗?@ArupRakshit我在寻找源文件的真实位置。在我的示例中,它位于c:/temp中。如果有帮助,请检查此-。为什么不能在相对之前执行此操作?还有,你做过gem吗?我的代码中没有使用require\u亲戚。但当我试图解决我的问题时,我认识到,require_relative对目录的更改没有问题。所以我想可能有一个解决办法。