Tại sao pwd không chấp nhận các tùy chọn dài như --physical?


11

Khi tôi hiển thị hướng dẫn cho pwd lệnh, nó nói rằng các tùy chọn dài như --physicalđược hỗ trợ

$ man pwd
PWD(1)                           User Commands                          PWD(1)

NAME
       pwd - print name of current/working directory

SYNOPSIS
       pwd [OPTION]...

DESCRIPTION
       Print the full filename of the current working directory.

       -L, --logical
              use PWD from environment, even if it contains symlinks

       -P, --physical
              avoid all symlinks

Tuy nhiên, nó thất bại khi tôi gõ như sau

$ pwd --physical
-bash: pwd: --: invalid option
pwd: usage: pwd [-LP]

Tại sao các lựa chọn dài không làm việc cho tôi?

Tôi đang sử dụng RHEL 6.4. Không có bí danh cho pwd được cấu hình. Có vẻ như đó là pwd tiêu chuẩn:

$ which pwd
/bin/pwd

1
Trang hướng dẫn dành cho một tiện ích độc lập không phải là một phần của bash.
Thomas Dickey

7
Sử dụng typethay vì which, vì whichchỉ hiển thị các lệnh, trong khi typehiển thị từ khóa, nội dung, bí danh, hàm và lệnh (và đường dẫn lệnh băm). Để biết thêm chi tiết, xem tại sao không sử dụng dịch vụ mà Dùng gì rồi?
wjandrea

1
Trong hệ thống của tôi man pwdcó lưu ý sau: your shell may have its own version of pwd, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supportsở cuối DESCRIPTIONphần.
Nykakin

Câu trả lời:


26

bashcó một lệnh tích hợp pwd, đó là những gì bạn đang sử dụng khi bạn chỉ cần nhập pwdvào trình bao của mình.

Để có được pwdnhư mô tả của trang này, bạn cần sử dụng lực lượng của lệnh bên ngoài. Bạn có thể làm điều này bằng cách chỉ định đường dẫn đầy đủ đến tệp thực thi ( /bin/pwdtrong trường hợp của bạn) hoặc bằng cách thêm envtrước dòng : env pwd, bắt đầu envlệnh có thể được sử dụng để thêm cài đặt vào môi trường (nhưng không được thực hiện ở đây) và sau đó envbắt đầu lệnh được chỉ định. Vì envkhông có nội dung pwd, "thực" /bin/pwdđược thực thi.

Ưu điểm của hàm dựng sẵn pwdtrong bash là bashtheo dõi thư mục hiện tại, do đó, nhận được giá trị bằng chi phí bằng 0, trong khi lệnh bên ngoài cần tìm kiếm thông qua hệ thống tệp để xác định đường dẫn, chuyên sâu hơn nhiều IO.


4
Đó không phải là cách lệnh bên ngoài thực sự hoạt động. unix.stackexchange.com/a/413225/5132
JdeBP

BTW: Bạn cũng có thể vô hiệu hóa shell dựng sẵn (ít nhất là trong bash) bằng cáchenable -n pwd
derobert

@JdeBP Nó từng là lần cuối tôi nhìn (một thời gian dài trước đây :-)); và mặc dù hiện tại nó sử dụng lệnh getcwd()gọi hệ thống, kernel vẫn truyền qua hệ thống tập tin, dễ thực hiện hơn trong không gian kernel do truy cập vào các cấu trúc dữ liệu có liên quan, Như câu trả lời được liên kết nêu: "Tuy nhiên, lưu ý rằng ngay cả trên FreeBSD và các hoạt động khác hệ thống hạt nhân không theo dõi thư mục làm việc với một chuỗi. "
wurtel

11

Đó là tài liệu trang /bin/pwd, nhưng khi bạn chạy, pwdbạn đang sử dụng trình bao có sẵn; xem đầu ra của

type pwd

Tích hợp sẵn của shell của pwdbạn không hỗ trợ các tùy chọn dài (xem tài liệu của shell của bạn; vì bạn đang sử dụng Bash, help pwdsẽ cung cấp một bản tóm tắt).

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.