CHASE_LINKS & cd -L

よく「なんとなくいい加減に覚えたまま、まんどくせまいっかーとかああ忙しい忙しい、と現実に押されてそのまま調べもせずに済ましているもの」(長い)ってあると思うけど。まず CHASE_LINKSと CHASE_DOTSを「おんなじジャンか」とか思っていた若かりし日(違う)の僕

quartz% pwd
/home/tkuro
quartz% ls -l asm
lrwxrwxrwx 1 tkuro tkuro 43 2009-04-03 13:01 asm -> /usr/lib/gcc/i486-linux-gnu/4.2/include/asm/

quartz% setopt  chasedots 
quartz% cd asm
quartz% pwd
/home/tkuro/asm
quartz% cd ..              <<< この時点で物理pathに変換される
quartz% pwd
/usr/lib/gcc/i486-linux-gnu/4.2/include  <<< [この結果]

quartz% setopt  chaselinks 
quartz% cd asm                           <<< この時点で物理pathに変換される
quartz% pwd
/usr/lib/gcc/i486-linux-gnu/4.2/include/asm
quartz% cd ..
quartz% pwd
/usr/lib/gcc/i486-linux-gnu/4.2/include  <<< [あの結果]

[この結果]と[あの結果]だけ考えてて、「おんなじジャンか」とか思ってしまった若かり(ry

でもま、どうせ外部プログラムからはシェルの論理pathなんて知ったこっちゃ無いわけで

quartz% python -c 'import os; print os.getcwd()'
/usr/lib/gcc/i486-linux-gnu/4.2/include/asm

なんにつかうのかなーっておそらくシェルスクリプト内部で作業ディレクトリを行ったり戻ったりなんかするときかなーと思って、でそれなら dirstack使えばいいんじゃないかなーとか微妙に気になるのでもう少し考えてみようとか思うんだけど、実はそれは本題ではなくって、、、

タイトルのお話は cd の -Lフラグのお話。-Lをつけると CHASE_LINKSしていても論理pathのままで扱う(物理path変換しない)という奴なんだけど、何も考えずに

quartz% setopt chaselinks
quartz% cd -L asm
quartz% pwd
/usr/lib/gcc/i486-linux-gnu/4.2/include/asm

あれあれあれー?

quartz% cd ..
quartz% pwd
/usr/lib/gcc/i486-linux-gnu/4.2/include

変換してるジャン、どーなってるジャン。とかおばかな僕はしばらく悩んだ。んで、時間が無かったので無視した。いかんです。こういうのって無視すると後からとてつもなく気になってくる。しかも苦手意識が生まれるもんだから中々本腰で調べない。いかんいかん。
しかしまあ、わかってしまえば、、、

quartz% pwd -L
/home/tkuro/asm
quartz% cd -L ..
quartz% pwd
/home/tkuro

とか非常に簡単なことだったりした。-L つけてなかったから折角内部的には論理path /home/tkuro/asm を保持していても相対path ..をくっつけたとたんに /home/tkuro/asm/.. となってこれが変換対象。あたりまえ。
あ゛ー馬鹿すぎーる