Ketika saya melakukan cd melalui symlink, mengapa pwd menunjukkan symlink daripada path yang sebenarnya?

19

Saya membuat tautan lunak ( ln -s 1 2) ke direktori yang ada di dalam testdirektori dan membuka tautan lunak ( cd 2) dan menampilkan jalur saat ini menggunakan pwd. Jalur yang ditampilkan adalah ~/test/2dan tidak ~/test/1.

Ini berbeda di OS seperti Windows, jalan pintas membawa kita ke direktori nyata. Saya sedikit bingung bagaimana cara kerja soft link ini di Linux. Apakah ini bukan jalan pintas seperti di Windows? Kenapa jalannya tidak ~/test/1?

 $ mkdir test
 $ cd test
 $ mkdir 1
 $ ln -s 1 2
 $ cd 2
 $ pwd
 /home/dazz/test/2
DScript
sumber
2
Terima kasih telah menghapus tangkapan layar. Lain kali, harap edit pertanyaan Anda alih-alih menghapus dan mengirim ulang. Menghapus terlalu banyak pertanyaan Anda sendiri dapat membuat Anda dilarang bertanya. Larangan itu otomatis sehingga kami tidak dapat berbuat banyak tentang hal itu. Bagaimanapun, Anda tidak perlu memposting ulang karena mengedit menabrak pertanyaan .
terdon
Kenapa kamu bertanya dua kali? askubuntu.com/q/610133/367165
AB
AB forum yang sama?
DScript

Jawaban:

18

Itu adalah fitur dari shell yang mengingat bagaimana Anda sampai di tempat Anda berada.
Jika Anda telah realpathmenginstal, Anda dapat melakukan:

$ realpath 
/home/dazz/test/1

Dan kurang jika Anda memiliki python:

$ python -c "import os; print(os.path.realpath('.'))"
/home/dazz/test/1

atau readlink (dari coreutils):

$ readlink -f .
/home/dazz/test/1

atau /bin/pwd(bukan shell built-in pwd):

$ /bin/pwd
/home/dazz/test/1
Anthon
sumber
ls -l /proc/$$/cwdmemanfaatkan /procantarmuka sistem file kernel .
Bruce Ediger
8
Catatan juga pwd -Puntuk mencetak path fisik, bukan logis, ke direktori saat ini.
godlygeek
8

Kontras pwddan /bin/pwd.

pwd, yang merupakan perintah bawaan di banyak shell, memberi tahu Anda di mana shell Anda berpikir Anda berada (dan karenanya memperlakukan symlink "soft link" seolah-olah itu adalah direktori nyata.

/bin/pwdadalah program eksternal yang memberi tahu Anda di mana Anda sebenarnya, jika perlu dengan melintasi pohon sistem file hingga /. Tidak memperhitungkan symlink karena tidak ada ketika melintasi ke atas..

roaima
sumber
6

Jawaban lain telah dibahas /bin/pwdvs shell builtin pwd.

Jika Anda ingin mengikuti symlinks dalam gaya Windows yang Anda sebutkan, gunakan cd -P: itu akan mengubah variabel PWD sesuai.

Jika Anda ingin menggunakan -Psecara default, Anda dapat menambahkan baris ini ke .bashrcatau .zshrc:

set -P

Kerang lain mungkin berbeda.

David Lord
sumber