Sự khác biệt trong sử dụng giữa pwd và $ PWD


9

Để in biến $PWDlệnh môi trường làm việc hiện tại / hiện tại pwdcó sẵn. Vì vậy, sự khác biệt trong cách sử dụng của cả hai là gì? hoặc nên chọn cái gì cho mục đích cụ thể?

Câu trả lời:


10

Điều đó phụ thuộc vào những gì bạn đang làm. Trước hết, $PWDlà một biến môi trường và pwdlà một shell dựng sẵn hoặc một nhị phân thực tế:

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

Bây giờ, bash dựng sẵn sẽ chỉ in giá trị hiện tại $PWDtrừ khi bạn sử dụng -Pcờ. Như đã giải thích trong 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.

Mặt khác pwd, nhị phân nhận được thư mục hiện tại thông qua lệnh getcwd(3)gọi hệ thống trả về cùng giá trị như readlink -f /proc/self/cwd. Để minh họa, hãy thử di chuyển vào một thư mục là một liên kết đến một thư mục khác:

$ 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

Vì vậy, kết luận, trên các hệ thống GNU (như Ubuntu) pwdecho $PWDtương đương trừ khi bạn sử dụng -Ptùy chọn nhưng /bin/pwdkhác biệt và hoạt động như thế nào pwd -P.


Một điểm khác biệt là việc sử dụng $ PWD khi khả dụng sẽ tránh việc loại bỏ một phần con như echo hoặc pwd. Điều này làm cho nó có lợi cho hiệu suất và theo dõi chương trình.
Joe Atzberger

3

Cả hai sẽ trả về cùng một kết quả nếu bạn sử dụng chúng mà không có tùy chọn cho tất cả các thư mục làm việc, kể cả khi trong các liên kết tượng trưng.

Tuy nhiên, từ man pwd:

-P, --physical
    avoid all symlinks

Điều này có nghĩa là thực thi pwd -Pkhi trong các liên kết tượng trưng trỏ đến một số thư mục khác sẽ in đường dẫn đến thư mục gốc.

Ví dụ: nếu bạn có một liên kết tượng trưng /var/runtrỏ đến /runvà bạn hiện đang ở trong /var/run/thư mục, thực thi

echo $PWD

sẽ trở lại:

/var/run

và sẽ giống nhau cho pwd. Tuy nhiên, nếu bạn thực thi:

pwd -P

sẽ trở lại

/run

Do đó, nó phụ thuộc vào đường dẫn bạn yêu cầu: đường dẫn thực tế không có liên kết tượng trưng hoặc thư mục hiện tại bỏ qua các liên kết tượng trưng. Sự khác biệt duy nhất giữa pwd -Pecho $PWDlà khi có các liên kết tượng trưng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.