/tmp/test.rb を作って
#!ruby puts __FILE__
~/bin にシンボリックリンクを張る
cd ~/bin ln -s /tmp/test.rb te
呼び出す
$ te /home/basyura/bin/te
となるんだけど、ここで /tmp/test.rb を取得するにはどうしたらいいのか?
puts `ls -la #{__FILE__}`.split(" -> ")[1] #=> /tmp/test.rb
とか?(^ ^;
よく分からないのが
#!ruby puts __FILE__ #=> /home/basyura/bin/te puts File::Stat.new(__FILE__).symlink? #=> false
これで symlink? が false を返すんだけどなぜ? cygwin の ln は windows のショートカット扱いだからかなぁと思ったんだけど、ubuntu 環境でも同じ。マニュアルにも
symlink?
シンボリックリンクである時に真
とあるんだけど。そもそもシンボリックリンクの理解が間違ってる?
追記
puts File.symlink?(__FILE__) #=> true
ってことで File::Stat を使ったのがいけなかったのか。ついでに
puts File.readlink(__FILE__) #=> /tmp/test.rb
ってしたら、リンク先もとれた。
新しいリファレンスマニュアルにはちゃんと書いてある。
symlink? -> false
instance method File::Stat#symlink?
シンボリックリンクである時に真を返します。ただし、File::Statは自動的にシンボリックリンクをたどっていくので常にfalseを返します。