pwd ที่ไม่มี symlinks


54

ถ้าฉันpwdสังเกตเห็นว่ามันใช้ symlink อะไรก็ตามที่ฉันเคยเข้าไปในไดเรกทอรีปัจจุบัน ฉันสามารถบอกให้ฉันทราบไดเรกทอรี "ของจริง" ที่ฉันอยู่หรือไม่ ... คือเส้นทางจากรูทไปยังไดเรกทอรีปัจจุบันของฉันโดยไม่ใช้ symlink ใด ๆ

คำตอบ:


70

ตามที่ manpage POSIX สำหรับpwdที่-Pตัวเลือกอาจจะมีการใช้งาน:

-P ชื่อพา ธ สัมบูรณ์ที่เขียนจะต้องไม่มีชื่อไฟล์ที่ในบริบทของชื่อพา ธ ให้อ้างอิงถึงไฟล์ของลิงค์สัญลักษณ์ประเภท

ดังนั้น

$ pwd -P

ควรเป็นสิ่งที่คุณต้องการ


ฉันต้องการจะชี้ให้เห็นว่าข้อมูลนี้พบได้ง่ายโดยการพิมพ์man pwdเชลล์เพื่อค้นหาตัวเลือกสำหรับคำสั่งนี้
Chud37

7

เชลล์ 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แต่คุณอาจจะไม่ต้องพึ่งพาที่และเพียงแค่ใช้


2
พฤติกรรมที่คุณอธิบายเป็นพฤติกรรมหนึ่งในระบบ Linux ที่/bin/pwdเป็น GNU pwdเมื่อ POSIXLY_CORRECT ไม่ได้ถูกตั้งค่า ในระบบ POSIX ที่อยู่ในpwd จะใช้ $ PWD และอาจส่งคืนพา ธ ด้วย symlinks GNU pwd จะทำงานในลักษณะ POSIX นั้นเมื่อพบตัวแปร POSIXLY_CORRECT ในสภาพแวดล้อมของมัน /bin/bin/pwd
Stéphane Chazelas
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.