結論から言えばpwd -P
をサブシェルでcd
してから使う方法が一番良いっぽい.
# シンボリックリンクのパスを$fileとしたとき
originalpath=$(cd $(dirname $file); pwd -P)
pwd -P
でカレントディレクトリのオリジナルパスを表示してくれる.
単純に相対パスを絶対パスへ変換したいだけなら-P
を取ればよい.
他の方法としてはreadlink
コマンドを使用する方法がある
readlink ~/.vim
/Users/iaarchiver/Dropbox/Sync/dotfiles/.vim
しかしこれは引数がSymlink以外だと何にも返してくれない.Symlinkであっても辿れるのは対象のリンク先のみ.再帰的にオリジナルを探索してくれるわけではないので注意.
GNUでは再帰的にオリジナルを探してくれるreadlink -f
, 他にもrealpath
もあるらしい.