หากต้องการพิมพ์ตัวแปรสภาวะแวดล้อม ไดเร็กทอรีการทำงานปัจจุบัน / ปัจจุบัน$PWDและคำสั่ง pwdจะพร้อมใช้งาน ดังนั้นการใช้ทั้งสองอย่างแตกต่างกันอย่างไร หรือสิ่งที่ควรเลือกเพื่อวัตถุประสงค์เฉพาะ?
หากต้องการพิมพ์ตัวแปรสภาวะแวดล้อม ไดเร็กทอรีการทำงานปัจจุบัน / ปัจจุบัน$PWDและคำสั่ง pwdจะพร้อมใช้งาน ดังนั้นการใช้ทั้งสองอย่างแตกต่างกันอย่างไร หรือสิ่งที่ควรเลือกเพื่อวัตถุประสงค์เฉพาะ?
คำตอบ:
ขึ้นอยู่กับสิ่งที่คุณทำ ประการแรก$PWDคือตัวแปรสภาพแวดล้อมและpwdเป็นเชลล์ในตัวหรือไบนารีจริง:
$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
ตอนนี้ bash builtin จะพิมพ์ค่าปัจจุบันของ$PWDเว้นแต่คุณจะใช้-Pค่าสถานะ ตามที่อธิบายไว้ในhelp pwd:
pwd: pwd [-LP]
Print the name of the current working directory.
Options:
-L print the value of $PWD if it names the current working
directory
-P print the physical directory, without any symbolic links
By default, `pwd' behaves as if `-L' were specified.
pwdไบนารีบนมืออื่น ๆ ที่ได้รับไดเรกทอรีปัจจุบันผ่านสายระบบซึ่งผลตอบแทนคุ้มค่าเช่นเดียวกับgetcwd(3) readlink -f /proc/self/cwdหากต้องการแสดงตัวอย่างลองย้ายไปยังไดเรกทอรีที่มีลิงก์ไปยังอีกไดเรกทอรีหนึ่ง:
$ ls -l
total 4
drwxr-xr-x 2 terdon terdon 4096 Jun 4 11:22 foo
lrwxrwxrwx 1 terdon terdon 4 Jun 4 11:22 linktofoo -> foo/
$ cd linktofoo
$ echo $PWD
/home/terdon/foo/linktofoo
$ pwd
/home/terdon/foo/linktofoo
$ /bin/pwd
/home/terdon/foo/foo
ดังนั้นในการสรุปในระบบ GNU (เช่น Ubuntu) pwdและecho $PWDเทียบเท่าเว้นแต่คุณจะใช้-Pตัวเลือก แต่แตกต่างกันและพฤติกรรมเช่น/bin/pwdpwd -P
ทั้งสองจะส่งคืนผลลัพธ์เดียวกันถ้าคุณใช้โดยไม่มีตัวเลือกสำหรับไดเรกทอรีการทำงานทั้งหมดรวมถึงเมื่ออยู่ในลิงก์สัญลักษณ์
อย่างไรก็ตามจากman pwd:
-P, --physical
avoid all symlinks
นี่จะหมายถึงการดำเนินการpwd -Pเมื่ออยู่ในลิงก์สัญลักษณ์ซึ่งชี้ไปยังไดเรกทอรีอื่นบางแห่งจะพิมพ์เส้นทางไปยังไดเรกทอรีเดิม
ตัวอย่างเช่นหากคุณมีลิงก์สัญลักษณ์/var/runที่ชี้ไป/runและคุณอยู่ใน/var/run/ไดเรกทอรีให้เรียกใช้งาน
echo $PWD
จะกลับมา:
/var/run
pwdและจะเป็นเหมือนกันสำหรับ อย่างไรก็ตามหากคุณดำเนินการ:
pwd -P
จะกลับมา
/run
ดังนั้นขึ้นอยู่กับเส้นทางที่คุณต้องการ: เส้นทางจริงโดยไม่มีลิงก์สัญลักษณ์หรือไดเรกทอรีปัจจุบันโดยไม่สนใจลิงก์สัญลักษณ์ ข้อแตกต่างระหว่างระหว่างpwd -Pและecho $PWDคือเมื่อมีลิงก์สัญลักษณ์