Saya membuat tautan lunak ( ln -s 1 2
) ke direktori yang ada di dalam test
direktori dan membuka tautan lunak ( cd 2
) dan menampilkan jalur saat ini menggunakan pwd
. Jalur yang ditampilkan adalah ~/test/2
dan 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
shell
symlink
cd-command
DScript
sumber
sumber
Jawaban:
Itu adalah fitur dari shell yang mengingat bagaimana Anda sampai di tempat Anda berada.
Jika Anda telah
realpath
menginstal, Anda dapat melakukan:Dan kurang jika Anda memiliki python:
atau readlink (dari coreutils):
atau
/bin/pwd
(bukan shell built-inpwd
):sumber
ls -l /proc/$$/cwd
memanfaatkan/proc
antarmuka sistem file kernel .pwd -P
untuk mencetak path fisik, bukan logis, ke direktori saat ini.Kontras
pwd
dan/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/pwd
adalah 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..
sumber
Jawaban lain telah dibahas
/bin/pwd
vs shellbuiltin 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
-P
secara default, Anda dapat menambahkan baris ini ke.bashrc
atau.zshrc
:Kerang lain mungkin berbeda.
sumber