回答:
以下を使用する必要があります。
ln -s "$(cd . && pwd)" ~/mylink
または:
ln -s "$(pwd -P)" ~/mylink
現在の作業ディレクトリの正しい結果を取得します。この質問のように、作業中に変更できます。
$PWD
は$(pwd -P)
(現在のディレクトリへの正規のパス)ではなく、(そこに到達するために使用したパス)を使用する可能性があります。$PWD
もはや現在のディレクトリを指していない場合$(pwd -P)
、次の分でそれが言うこともありません。
"$PWD"
現在のディレクトリが移動しても、古い値が残っていることがわかります。ユーザーまたはシェルによって初期化されたPWD
ときにのみ設定されますcd
。
cd
ようにするには保証されません$ PWDまたはpwdの出力。現在のディレクトリへのパス。あなたは起こりそうにない何かに対してガードしようとしていますが、最初の解決策では必ずしも効果的ではなく、2番目の解決策では振る舞いを変えています。
mv
後に誰かがやったln
場合、あなたは同じ状況になります。一方、彼がそうした場合、リンクが他の場所を指している場合にリンクが間違った場所を指しているcd /long/logical/path/to/some/directory
ので、リンクが指すこと/vg0/lv1/user2/app4
(正規のパス)は望ましくありませ/long/logical/path/to/some/directory
ん。
"$PWD"
POSIXシェルでと~0
してzsh
。