pwd (Re: [REPOST4] [Vote] fj charter ver. 2005.3.1)
しらいです。
「駄文」の方に対する followup なので Followup-To: には従わ
ないとゆーことで。
In article <050308124804.M0122887@sma.gssm.otsuka.tsukuba.ac.jp>,
<kuno-fjcharter@gssm.otsuka.tsukuba.ac.jp> wrote:
>久野@fj憲章2005年3月版署名管理機関です。
> …駄文というか、fj.unix系への投稿なのでその話題を少し。そもそ
>もカレントディレクトリがどこかというのをUnixのファイルシステム構
>造からして知るのは面倒そうだし、シンボリックリンクをたどったとき
>はそっちの名前であって欲しい気もするので、自分ではpwdを
>「echo $cwd」とかにaliasしておいて必要なときだけ/bin/pwdを呼ぶ、
>というのをずっと習慣にしていました。あんまり関係ないかな。
既に POSIX 的にも pwd(1) には -L option が採用されていて、
getcwd(3) 的な物理パス名だけでは不十分だということになってい
ますので、最近の OS だと /bin/pwd だけでこと足りるのかも。
尤も、POSIX pwd の -L option は単に $PWD を見てるだけのよ
うですので、正しい論理パス名が得られるかどうかは pwd(1) を呼
ぶ親プロセス次第ですね。
そもそも設定側の chdir(2) に対応する取得側 system call が
存在しないという設計が、今となっては不十分だったのかも。
[補足: おうちのかたへ]
上記の説明が理解出来ないお子さまがいらっしゃるようでしたら、
「..」以下の各 directory entry の inode と「.」の inode を比
較しながら「/」まで遡るといった getcwd(3) の実装を示した上で、
symbolic link ではこのメカニズムが通用しないことを導いてあげ
て下さい。
一般に symbolic link を辿った論理パス名は、その移動経緯を
環境変数等で記憶しておかないと、移動が完了した後からは判別す
ることが出来ないことに気づけば、POSIX pwd の実装にも納得して
頂けることでしょう。
--
しらい たかし
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735