ln -s 1 2
ディレクトリ内のディレクトリを指すソフトリンク()を作成し、test
()を使用してソフトリンクを開き、cd 2
現在のパスを表示しましたpwd
。表示されたパスは~/test/2
、ではありません~/test/1
。
ショートカットを使用すると、物理ディレクトリに移動するWindowsなどのオペレーティングシステムではそうではありません。このソフトリンクがLinuxでどのように機能するかは少し混乱しています。これは、のようなショートカットではありませんかWindows
?なぜパスではないのですか~/test/1
?
$ mkdir test
$ cd test
$ mkdir 1
$ ln -s 1 2
$ cd 2
$ pwd
/home/dazz/test/2
答え1
これは、現在の場所にどのように到達したかを覚えるシェルの機能です。
すでに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
答え2
コントラストpwd
と/bin/pwd
。
pwd
これは、シェルがユーザーがどこにいると思うかを知らせる組み込みコマンドです。したがって、シンボリックリンク「ソフトリンク」を物理ディレクトリとして扱います。
/bin/pwd
必要に応じて、ファイルシステムツリーに移動して実際の場所を知らせる外部プログラムです/
。上向きに移動すると、シンボリックリンクが存在しないため、シンボリックリンクは考慮されません。..
答え3
他の答えはすでに/bin/pwd
シェル操作に対処していますbuiltin pwd
。
上記のWindowsスタイルのシンボリックリンクに従うには、次のようにしますcd -P
。これにより、PWD変数が変更されます。
デフォルトで使用するには、次の行をまたは-P
に追加します。.bashrc
.zshrc
set -P
他のエンクロージャは異なる場合があります。