ถ้าฉันpwdสังเกตเห็นว่ามันใช้ symlink อะไรก็ตามที่ฉันเคยเข้าไปในไดเรกทอรีปัจจุบัน ฉันสามารถบอกให้ฉันทราบไดเรกทอรี "ของจริง" ที่ฉันอยู่หรือไม่ ... คือเส้นทางจากรูทไปยังไดเรกทอรีปัจจุบันของฉันโดยไม่ใช้ symlink ใด ๆ
ถ้าฉันpwdสังเกตเห็นว่ามันใช้ symlink อะไรก็ตามที่ฉันเคยเข้าไปในไดเรกทอรีปัจจุบัน ฉันสามารถบอกให้ฉันทราบไดเรกทอรี "ของจริง" ที่ฉันอยู่หรือไม่ ... คือเส้นทางจากรูทไปยังไดเรกทอรีปัจจุบันของฉันโดยไม่ใช้ symlink ใด ๆ
คำตอบ:
ตามที่ manpage POSIX สำหรับpwdที่-Pตัวเลือกอาจจะมีการใช้งาน:
-P ชื่อพา ธ สัมบูรณ์ที่เขียนจะต้องไม่มีชื่อไฟล์ที่ในบริบทของชื่อพา ธ ให้อ้างอิงถึงไฟล์ของลิงค์สัญลักษณ์ประเภท
ดังนั้น
$ pwd -P
ควรเป็นสิ่งที่คุณต้องการ
เชลล์ pwd ในตัวใช้พา ธ ที่เชลล์ติดตามเมื่อคุณcd(และเก็บไว้ใน$PWD) ซึ่งหมายความว่าหากคุณมี symlink ไปยังเส้นทางที่ซับซ้อน (ลึก) มันจะบอกคุณว่าคุณพิมพ์อะไรเพื่อเปลี่ยนเป็นไดเรกทอรีนั้นแทนที่จะเป็นเส้นทางที่แท้จริง สิ่งนี้ทำเพื่อมอบสิ่งที่คุณต้องการให้มากที่สุด
/bin/pwdใช้การgetcwdเรียกของระบบ (ซึ่งในวันนี้คือการเรียกใช้ไลบรารีการอ่าน/proc/self/cwd) ซึ่งส่งคืนพา ธ canonical สำหรับไดเรกทอรีปัจจุบันจะทำการสแกน symlink traversals ทั้งหมด
ขณะที่สตีเว่น D ชี้pwdมีตัวเลือกที่จะไม่สนใจ-P $PWDนอกจากนี้ยังมีตัวเลือกที่จะกลับเนื้อหาของ-L $PWDหน้า man สำหรับpwdไม่ได้บอกว่าจะใช้ตัวเลือกใดเป็นค่าเริ่มต้น แต่ประสบการณ์บอกฉันว่าคำอธิบายข้างต้นถูกต้อง (shell pwdvs. /bin/pwd) pwd -Pแต่คุณอาจจะไม่ต้องพึ่งพาที่และเพียงแค่ใช้
/bin/pwdเป็น GNU pwdเมื่อ POSIXLY_CORRECT ไม่ได้ถูกตั้งค่า ในระบบ POSIX ที่อยู่ในpwd จะใช้ $ PWD และอาจส่งคืนพา ธ ด้วย symlinks GNU pwd จะทำงานในลักษณะ POSIX นั้นเมื่อพบตัวแปร POSIXLY_CORRECT ในสภาพแวดล้อมของมัน /bin/bin/pwd
man pwdเชลล์เพื่อค้นหาตัวเลือกสำหรับคำสั่งนี้