realpath
THIS="$0" while [ -h "$THIS" ]; do ls=`ls -ld "$THIS"` link=`expr "$ls" : '.*-> \(.*\)$'` if expr "$link" : '.*/.*' > /dev/null; then THIS="$link" else THIS=`dirname "$THIS"`/"$link" fi done
何してるのかなと思ったら,シンボリックリンクをたどって,パスを調べてた.
最初はただ$0を絶対パスとかに変換してるんだろと思い込んでいたら*1,よく見るとなぜかwhile しかも -h の判定って何だっけと思ったら,-L と同じでシンボリックリンクか判定するオプションで,シンボリックリンクをたどるからwhile というわけだった.
ということは,Cのrealpath関数と同じようなしてるんだなとか思っていたら,なんとなくシェルスクリプトでrealpathを呼びたくなってしまったw
とりあえず,perlのinline::cを使っちゃえとか思って
$ ln -s mbox mail $ perl -M'Inline C=>q{char*r(char*x){static char b[1024];return NULL==realpath(x,b)?x:b;}}' -leprint+r+mail /root/mbox
ここで,はっとわれに返って,何でHP-UXでInline::CをCPANからインストールして,そのままrootで現実逃避してるん.しかも,readlinkでいいじゃんなどと気がついた...orz
*1:よく自分はそれをやってるから