ความแตกต่างในการใช้งานระหว่าง pwd และ $ PWD


9

หากต้องการพิมพ์ตัวแปรสภาวะแวดล้อม ไดเร็กทอรีการทำงานปัจจุบัน / ปัจจุบัน$PWDและคำสั่ง pwdจะพร้อมใช้งาน ดังนั้นการใช้ทั้งสองอย่างแตกต่างกันอย่างไร หรือสิ่งที่ควรเลือกเพื่อวัตถุประสงค์เฉพาะ?

คำตอบ:


10

ขึ้นอยู่กับสิ่งที่คุณทำ ประการแรก$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


ความแตกต่างอย่างหนึ่งคือการใช้ $ PWD เมื่อพร้อมใช้งานจะหลีกเลี่ยงการฟอร์คอมมานด์เช่น echo หรือ pwd สิ่งนี้ทำให้มีประโยชน์สำหรับประสิทธิภาพและการติดตามโปรแกรม
Joe Atzberger

3

ทั้งสองจะส่งคืนผลลัพธ์เดียวกันถ้าคุณใช้โดยไม่มีตัวเลือกสำหรับไดเรกทอรีการทำงานทั้งหมดรวมถึงเมื่ออยู่ในลิงก์สัญลักษณ์

อย่างไรก็ตามจาก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คือเมื่อมีลิงก์สัญลักษณ์

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