シンボリックリンクと相対パス の組み合わせでハマったこと
例えばこんなディレクトリ構成があるとします
tmp / c ( a/b へのシンボリックリンク) | / 01.txt ( "tmp/01.txt" ) | +- a / 01.txt( "tmp/a/01.txt" ) | +- b / 01.txt( "tmp/a/b/01.txt" )
んで、シンボリック c から、tmp/01.txt を読み込みたいので、以下のように、相対パスでファイルを読みだしてみる
irb(main):001:0> File.open('./c/../01.txt'){ |f| f.read } => "/tmp/a/01.txt\n"
すると、/tmp/a/01.txt が読み出されている!
こういう場合、expand_path を挟んであげると、シンボリックリンク以降の相対パスも好意的に解釈してくれるようです
irb(main):001:0> File.open(File.expand_path('./c/../01.txt')){ |f| f.read } => "/tmp/01.txt\n"