test
ディレクトリ内のディレクトリへのソフトリンク(ln -s 1 2
)を作成し、ソフトリンク(cd 2
)を開いて、pwd
を使用して現在のパスを表示しました。表示されたパスは~/test/2
ではなく~/test/1
でした。
WindowsなどのOSでは異なります。ショートカットを使用すると、実際のディレクトリに移動できます。 Linuxでこのソフトリンクがどのように機能するか、少し混乱しています。 Windows
のようなショートカットではありませんか?パスが~/test/1
ではないのはなぜですか?
$ mkdir test
$ cd test
$ mkdir 1
$ ln -s 1 2
$ cd 2
$ pwd
/home/dazz/test/2
これは、シェルが現在の場所に到達した方法を記憶するシェルの機能です。realpath
がインストールされている場合、次のことができます。
$ realpath
/home/dazz/test/1
そしてあなたがPythonを持っているならそれが欠けています:
$ python -c "import os; print(os.path.realpath('.'))"
/home/dazz/test/1
またはreadlink(coreutilsから):
$ readlink -f .
/home/dazz/test/1
または/bin/pwd
(シェル組み込みpwd
ではありません):
$ /bin/pwd
/home/dazz/test/1
pwd
と/bin/pwd
を比較してください。
多くのシェルの組み込みコマンドであるpwd
は、シェルがどこにいるかをシェルに伝えます(したがって、シンボリックリンクの「ソフトリンク」を実際のディレクトリのように扱います。
/bin/pwd
は、必要に応じてファイルシステムツリーを/
までたどることにより、現在の場所を通知する外部プログラムです。 ..
を上方向に移動するときに存在しないため、シンボリックリンクは考慮されません。
他の回答は/bin/pwd
とシェルのbuiltin pwd
をカバーしています。
前述のWindowsスタイルのシンボリックリンクをたどる場合は、cd -P
を使用します。これにより、PWD変数がそれに応じて変更されます。
デフォルトで-P
を使用する場合は、次の行を.bashrc
または.zshrc
に追加できます。
set -P
他のシェルは異なる場合があります。