pwd とは何かと、cwd やシンボリックリンクとの関係
Published: 2021/11/5
Current Working Directory とは
プロセスが変数として保持する、今作業中のディレクトリ。
chdir
システムコールによって変更可能。
exec
系や open
など、ファイルを相対パスで指定する系のシステムコールが影響を受ける。
getcwd()
のシステムコールでは必ず symlink 解決済みが返る
The pathname shall contain no components that are dot or dot-dot, or are symbolic links.
実装についての考察
getcwd()
にてシンボリックリンク解決済みであることが仕様で求められる以上、素直に考えて chdir
した時点でシンボリックリンクを解決しておくのが妥当。
PWD とは
シェルが保持するカレントワーキングディレクトリっぽい値を表す環境変数。
ただのカレントワーキングディレクトリとの違いは、この値は必ずしもシンボリックリンクを解決しない。
どちらかというと、ロジカルな文字列操作によってあるべき PWD の値を決定した後、そこへ向けて chdir
する、というような挙動を cd
コマンドはしている。
(ソース)
また、 POSIX の記述によれば、 PWD
環境変数を手動で設定した場合に、 pwd
コマンドや cd
コマンドの挙動は undefined になる。
If an application sets or unsets the value of PWD, the behavior of cd is unspecified.
なので、 PWD は基本的に自分では操作せず、シェルにおいて cd
コマンドを利用して設定されるそれを活用する、方がポータビリティは高いと考えられる。
サマリー FAQ
Q. cwd とは何ですか?
Q. pwd とは何ですか?
Q. PWD の環境変数を手動で設定したい場合には、どうするのが良いですか?
Tags: posixsymlink
関連記事
POSIX における環境変数の仕様について
2021/12/3
puma のリスタートディレクトリに関する仕様
2021/11/30
POSIX Sed のスクリプトの構文等の仕様について
2021/5/13
POSIX における文字とエンコーディング(ロケール)と正規表現
2021/5/10
Posix Sed で改行を出力する方法
2019/4/9