ถ้าฉัน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 pwd
vs. /bin/pwd
) pwd -P
แต่คุณอาจจะไม่ต้องพึ่งพาที่และเพียงแค่ใช้
/bin/pwd
เป็น GNU pwd
เมื่อ POSIXLY_CORRECT ไม่ได้ถูกตั้งค่า ในระบบ POSIX ที่อยู่ในpwd
จะใช้ $ PWD และอาจส่งคืนพา ธ ด้วย symlinks GNU pwd จะทำงานในลักษณะ POSIX นั้นเมื่อพบตัวแปร POSIXLY_CORRECT ในสภาพแวดล้อมของมัน /bin
/bin/pwd
man pwd
เชลล์เพื่อค้นหาตัวเลือกสำหรับคำสั่งนี้