$ PWD คืออะไร (เทียบกับไดเรกทอรีการทำงานปัจจุบัน)


27

ดังนั้น Wikipedia ( ลิงค์ ) จึงบอกฉันว่าคำสั่งpwdนั้นสั้นสำหรับ "print working directory" และนั่นสมเหตุสมผล

แต่สำหรับตัวแปรสภาพแวดล้อม "P" จะต้องเป็นตัวย่อสำหรับอย่างอื่นที่ไม่ใช่การพิมพ์

ฉันได้ยินคนพูดถึง "ไดเรกทอรีการทำงานปัจจุบัน" ซึ่งฟังดูดีกว่าและใช้งานง่ายกว่า แต่ยังคงสภาพแวดล้อมของตัวแปรที่เรียกว่า $ PWD ไม่ใช่ $ CWD ไม่มีใครเคยพูดว่า "คุณตรวจสอบตัวแปรไดเรกทอรีงานพิมพ์หรือไม่"

ฉันกำลังเล่นกับเว็บเซิร์ฟเวอร์แอปพลิเคชัน uWSGI และเมื่อเรียกใช้มันจะบอกฉัน (บนหน้าสถิติ uWSGI):

"cwd":"/home/velle/greendrinks",

เพื่อให้พวกเขาอย่างเห็นได้ชัดเช่น (ตัวย่อที่ใช้งานง่ายมากขึ้น) มากกว่าcwdpwd

ฉันเดาว่าฉันกำลังพยายามคิดออกว่าฉันเข้าใจผิดบางอย่างหรือหากเป็นเพียงเรื่องของการให้ชื่อตัวแปรสภาพแวดล้อมเป็นชื่อที่ไม่ได้ใช้งานง่าย


5
ปัจจุบันไดเรกทอรีงานหรือไม่
DarioP

3
ฉันสงสัยว่าคุณคิดมากเกินไป $PWDเทียบเท่ากับ`pwd`และนั่นเป็นเหตุผลเพียงพอ
ผู้ชายคนอื่นนั้น

1
เดาอีกครั้ง: ไดเรกทอรีการดำเนินการ?
oxfn

คำตอบ:


23

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

$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd

ตอนนี้ bash builtin จะพิมพ์ค่าปัจจุบันของ$PWDเว้นแต่คุณจะใช้-Pค่าสถานะ ตามที่อธิบายไว้ในhelp pwd:

pwd: pwd [-LP]

    พิมพ์ชื่อของไดเรกทอรีการทำงานปัจจุบัน

    ตัวเลือก:

      -L
          พิมพ์ค่าของ$PWD ถ้ามันเป็นชื่อไดเรกทอรีการทำงานปัจจุบัน
      -P
          พิมพ์ไดเรกทอรีทางกายภาพโดยไม่มีการเชื่อมโยงสัญลักษณ์ใด ๆ

    โดยค่าเริ่มต้น 'pwd' จะทำงานเหมือนว่ามีการระบุ '-L'

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

แหล่งที่มา https://askubuntu.com/a/476633/291937


1
@llua ไม่มีอะไรห้ามPWDเป็นตัวแปรสภาพแวดล้อม จริงๆแล้วมันเป็นกรณีเริ่มต้นที่มีเชลล์ส่วนใหญ่ถ้าไม่ใช่ทุกเชลล์และเหมาะสมที่จะจัดเตรียมให้กับกระบวนการชายด์
jlliagre

1
ฉันสงสัยว่าทำไมผู้คนถึงลงคะแนนดูเหมือนเป็นคำตอบที่ดีและอธิบายอย่างละเอียด
Mads Skjern

2
@MadsSkjern บิวด์อินส่วนใหญ่ต้องการมาตรฐาน POSIX เพื่อให้สามารถใช้งานได้เป็นคำสั่ง นี่คือการอนุญาตให้เรียกพวกเขาโดยตรงจากโปรแกรมอื่น ๆ โดยไม่จำเป็นต้องเปิดเปลือก
jlliagre

2
สิ่งนี้ไม่ได้ตอบคำถามฉัน คำถามไม่ได้เกี่ยวกับความแตกต่างระหว่าง$PWDและpwd(ซึ่งได้รับการครอบคลุมใน U&L ก่อนที่ฉันจะเชื่อ) แต่เกี่ยวกับเหตุผลที่นำไปสู่การตั้งชื่อตัวแปร " PWD"
John WH Smith

1
@Thushi คุณถูกต้องกว่าที่ควรจะเป็น PWD ถูกนำเสนอโดยksh88เอกสารชนิดใดที่เป็น: PWD The present working directory set by the cd command.คุณควรเพิ่มสิ่งนี้ในการตอบ
jlliagre

15

$ PWD เป็นP athname ของปัจจุบันW orking D irectory

เมื่อมีการเชื่อมโยงสัญลักษณ์อาจจะมีผลลัพธ์ที่แตกต่างจากการอ่าน $ PWD ที่จะดำเนินการคำสั่งpwd


คุณสามารถให้ตัวอย่างของวิธีการที่จะได้รับค่าที่แตกต่างกันสำหรับ$PWDและpwd?
Mads Skjern

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