Khi tôi cd thông qua một symlink, tại sao pwd hiển thị symlink thay vì đường dẫn thực?


19

Tôi đã tạo một liên kết mềm ( ln -s 1 2) đến một thư mục nằm trong testthư mục đó và mở liên kết mềm ( cd 2) và hiển thị đường dẫn hiện tại bằng cách sử dụng pwd. Đường dẫn hiển thị là ~/test/2và không ~/test/1.

Nó khác với một hệ điều hành như Windows, phím tắt đưa chúng ta đến thư mục thực. Tôi hơi bối rối về cách liên kết mềm này hoạt động trong Linux. Nó không phải là một phím tắt như trong Windows? Tại sao con đường không ~/test/1?

 $ mkdir test
 $ cd test
 $ mkdir 1
 $ ln -s 1 2
 $ cd 2
 $ pwd
 /home/dazz/test/2

2
Cảm ơn đã xóa ảnh chụp màn hình. Lần tới, vui lòng chỉnh sửa câu hỏi của bạn thay vì xóa và đăng lại. Xóa quá nhiều câu hỏi của riêng bạn có thể khiến bạn bị cấm hỏi. Lệnh cấm đó là tự động nên chúng tôi sẽ không thể làm gì nhiều về nó. Trong mọi trường hợp, bạn không cần phải đăng lại kể từ khi chỉnh sửa câu hỏi .
terdon

Tại sao bạn hỏi hai lần? Askubfox.com/q/610133/367165
AB

AB cùng diễn đàn?
DScript

Câu trả lời:


18

Đó là một tính năng của vỏ ghi nhớ cách bạn đến nơi bạn đang ở.
Nếu bạn đã realpathcài đặt, bạn có thể làm:

$ realpath 
/home/dazz/test/1

Và thiếu điều đó nếu bạn có trăn:

$ python -c "import os; print(os.path.realpath('.'))"
/home/dazz/test/1

hoặc readlink (từ coreutils):

$ readlink -f .
/home/dazz/test/1

hoặc /bin/pwd(không phải vỏ tích hợp pwd):

$ /bin/pwd
/home/dazz/test/1

ls -l /proc/$$/cwdtận dụng /procgiao diện hệ thống tập tin của kernel .
Bruce Ediger

8
Cũng lưu ý pwd -Pđể in đường dẫn vật lý, thay vì logic, đến thư mục hiện tại.
godlygeek

8

Tương phản pwd/bin/pwd.

pwd, là một lệnh tích hợp trong nhiều shell, cho bạn biết shell của bạn nghĩ bạn là ai (và do đó xử lý các liên kết "liên kết mềm" như thể chúng là các thư mục thực.

/bin/pwdlà một chương trình bên ngoài cho bạn biết bạn thực sự đang ở đâu, nếu cần bằng cách duyệt qua cây hệ thống tập tin /. Nó không có tài khoản của các liên kết tượng trưng bởi vì chúng không tồn tại khi đi qua..


6

Các câu trả lời khác đã được đưa ra /bin/pwdso với vỏ builtin pwd.

Nếu bạn muốn theo liên kết tượng trưng theo kiểu Windows mà bạn đã đề cập, hãy sử dụng cd -P: nó sẽ thay đổi biến PWD tương ứng.

Nếu bạn muốn sử dụng -Ptheo mặc định, bạn có thể thêm dòng này vào .bashrchoặc .zshrc:

set -P

Vỏ khác có thể thay đổi.

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.