$ NKT là gì? (so với thư mục làm việc hiện tại)


27

Vì vậy, Wikipedia ( liên kết ) cho tôi biết rằng lệnh pwdnày là viết tắt của "in thư mục làm việc" và điều đó có ý nghĩa.

Nhưng đối với biến môi trường, "P" phải là từ viết tắt của một cái gì đó khác với in.

Tôi nghe mọi người nói về "thư mục làm việc hiện tại", nghe có vẻ hay hơn và trực quan hơn, nhưng biến môi trường dường như được gọi là $ PWD, chứ không phải $ CWD. Không ai từng nói "Bạn đã kiểm tra biến thư mục làm việc in chưa?".

Tôi hiện đang chơi xung quanh với máy chủ ứng dụng web uWSGI và khi chạy, nó cho tôi biết (trên trang thống kê uWSGI):

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

vì vậy họ rõ ràng thích (viết tắt trực quan hơn) cwdhơn pwd.

Tôi đoán rằng tôi đang cố gắng tìm hiểu xem tôi có hiểu nhầm điều gì không, hoặc nếu đó chỉ là vấn đề đặt cho biến môi trường một cái tên không trực quan?


5
Danh mục công việc hiện tại?
DarioP

3
Tôi nghi ngờ bạn chỉ đang xem xét nó. $PWDlà tương đương với `pwd`, và đó là đủ biện minh.
anh chàng kia

1
Một phỏng đoán khác: Quy trình làm việc?
oxfn

Câu trả lời:


23

Đ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]

    In tên của thư mục làm việc hiện tại.

    Tùy chọn:

      -L
          in giá trị của $PWD nếu nó đặt tên cho thư mục làm việc hiện tại
      -P
          in thư mục vật lý, không có bất kỳ liên kết tượng trưng

    Theo mặc định, 'pwd' hoạt động như thể '-L' được chỉ định.

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.

Nguồn https://askubfox.com/a/476633/291937


1
@llua Không có gì cấm PWDlà một biến môi trường. Nó thực sự là trường hợp mặc định với hầu hết nếu không phải tất cả các shell và điều đó có ý nghĩa để cung cấp nó cho các tiến trình con.
jlliagre

1
Tôi tự hỏi tại sao mọi người đánh giá thấp, nó có vẻ như là một câu trả lời tốt, và giải thích cặn kẽ.
Mads Skjern

2
@MadsSkjern Hầu hết các nội dung được yêu cầu bởi tiêu chuẩn POSIX cũng có sẵn dưới dạng các lệnh. Điều này là để cho phép gọi chúng trực tiếp từ các chương trình khác mà không cần phải khởi chạy shell.
jlliagre

2
Điều này không thực sự trả lời câu hỏi cho tôi. Câu hỏi không thực sự về sự khác biệt giữa $PWDpwd(đã được đề cập trên U & L trước khi tôi tin), nhưng về lý do dẫn đến việc đặt tên biến " PWD".
John WH Smith

1
@Thushi Bạn có nhiều khả năng đúng. PWD đã được giới thiệu bởi ksh88tài liệu đó là: PWD The present working directory set by the cd command.Bạn nên thêm nó vào câu trả lời của bạn.
jlliagre

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.