シンボリックリンクを介してcdした場合、pwdが実際のパスではなくシンボリックリンクを表示するのはなぜですか?


19

ln -s 1 2ディレクトリ内にあるtestディレクトリへのソフトリンク()を作成し、ソフトリンク()を開き、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

2
スクリーンショットを削除していただきありがとうございます。次回は、削除して再投稿するのではなく、質問を編集してください。自分の質問を削除しすぎると、質問を禁止される可能性があります。この禁止は自動的に行われるため、私たちはそれについて多くのことをすることができません。いずれにせよ、編集すると質問がぶつかるので、再投稿する必要はありません。
テルドン

なぜ二度尋ねるの?askubuntu.com/q/610133/367165
AB

AB同じフォーラム?
-DScript

回答:


18

これは、シェルの機能であり、現在の場所に到達した方法を記憶します。
あなたがいる場合は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

ls -l /proc/$$/cwdカーネルの/procファイルシステムインターフェースを利用します。
ブルースエディガー

8
またpwd -P、現在のディレクトリへの論理パスではなく物理パスを出力することにも注意してください。
godlygeek

8

コントラストpwd/bin/pwd

pwd、多くのシェルの組み込みコマンドであり、シェルがあなたがどこにいると考えているかを示します(したがって、シンボリックリンクを「ソフトリンク」を実際のディレクトリであるかのように扱います。

/bin/pwdは、必要に応じてファイルシステムツリーをでたどって、実際にどこにいるかを伝える外部プログラムです/。シンボリックリンクを考慮しません..


6

他の答えは/bin/pwd、シェルの対をカバーしていますbuiltin pwd

あなたが言及したWindowsスタイルのシンボリックリンクを追跡したい場合、cd -Pそれを使用してください:それはそれに応じてPWD変数を変更します。

-Pデフォルトで使用する場合は、この行を.bashrcまたはに追加できます.zshrc

set -P

他のシェルは異なる場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.