เมื่อฉัน cd ผ่าน symlink ทำไม pwd แสดง symlink แทนที่จะเป็นเส้นทางจริง


19

ฉันสร้างการเชื่อมโยงนุ่ม ( ln -s 1 2) ไปยังไดเรกทอรีที่อยู่ภายในที่testไดเรกทอรีและเปิดการเชื่อมโยงนุ่ม ( cd 2) pwdและแสดงเส้นทางปัจจุบันใช้ เส้นทางที่แสดงเป็นและไม่ได้~/test/2~/test/1

มันแตกต่างกันใน OS เช่น Windows ทางลัดนำเราไปสู่ไดเรกทอรีจริง ฉันสับสนเล็กน้อยว่าซอฟต์ลิงค์นี้ทำงานอย่างไรใน Linux มันไม่ใช่ทางลัดWindowsใช่มั้ย เป็นเส้นทางที่ทำไมไม่~/test/1?

 $ mkdir test
 $ cd test
 $ mkdir 1
 $ ln -s 1 2
 $ cd 2
 $ pwd
 /home/dazz/test/2

2
ขอขอบคุณที่ลบภาพหน้าจอ ครั้งต่อไปโปรดแก้ไขคำถามของคุณแทนการลบและโพสต์ใหม่ การลบคำถามของคุณเองมากเกินไปอาจทำให้คุณถูกแบนไม่ให้ถาม การแบนนั้นเป็นแบบอัตโนมัติดังนั้นเราจะไม่สามารถทำอะไรได้มากนัก ในกรณีที่คุณไม่จำเป็นต้อง repost ตั้งแต่การแก้ไขกระแทกคำถาม
terdon

ทำไมคุณถามสองครั้ง askubuntu.com/q/610133/367165
AB

ฟอรั่มเดียวกัน AB?
DScript

คำตอบ:


18

นั่นคือคุณสมบัติของเชลล์ที่จำได้ว่าคุณไปถึงที่ที่คุณอยู่
หากคุณrealpathติดตั้งแล้วคุณสามารถทำได้:

$ realpath 
/home/dazz/test/1

และขาดสิ่งนั้นถ้าคุณมีงูหลาม:

$ 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อินเตอร์เฟสของระบบไฟล์ของเคอร์เนล
Bruce Ediger

8
หมายเหตุpwd -Pเพื่อพิมพ์แบบฟิสิคัลแทนที่จะเป็นโลจิคัลพา ธ ไปยังไดเร็กทอรีปัจจุบัน
godlygeek

8

ความคมชัดและpwd/bin/pwd

pwdซึ่งเป็นคำสั่งในตัวในเชลล์จำนวนมากจะบอกคุณว่าเชลล์ของคุณคิดว่าคุณอยู่ที่ใด

/bin/pwdเป็นโปรแกรมภายนอกที่จะบอกคุณที่คุณเป็นจริงหากจำเป็นโดย traversing /ต้นไม้ระบบแฟ้มขึ้นไป มันไม่ได้มีบัญชีของ symlinks เพราะสิ่งเหล่านั้นไม่มีอยู่เมื่อเคลื่อนที่ผ่าน..


6

คำตอบอื่น ๆ ได้ครอบคลุม/bin/pwdVS builtin pwdของเปลือก

หากคุณต้องการติดตาม symlink ในสไตล์ Windows ที่คุณกล่าวถึงให้ใช้cd -P: มันจะเปลี่ยนตัวแปร PWD ตามลำดับ

หากคุณต้องการใช้เป็น-Pค่าเริ่มต้นคุณสามารถเพิ่มบรรทัดนี้ใน.bashrcหรือ.zshrc:

set -P

กระสุนอื่นอาจแตกต่างกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.