cd và ls hành xử khác nhau khi bên trong một liên kết mềm đến một thư mục


7

Khi chúng tôi cd vào một thư mục thông qua liên kết mềm của nó, tôi quan sát:

  1. ls ..sẽ hiển thị nội dung của thư mục mẹ của thư mục được liên kết, trong khi cd ..sẽ đi theo thư mục gốc của liên kết mềm . Tại sao chúng khác nhau?

  2. cd ..được theo sau bởi tab không cung cấp bất kỳ tùy chọn nào để hoàn thành, không phải cho nội dung của thư mục mẹ của thư mục được liên kết cũng như nội dung của thư mục mẹ của liên kết mềm. Tại sao?

  3. Làm thế nào để chúng ta biết, trong số tất cả các lệnh thư mục, hoạt động cho thư mục được liên kết hoặc cho liên kết mềm của nó, trong tình huống trên?


1
Không thể yêu cầu có câu trả lời cho điều đó, nhưng tôi biết rằng cdcó thể được thực hiện để hành xử theo vị trí "vật lý" mà nó nằm trong (tức là thư mục được liên kết với) thông qua công -Ptắc. Ít nhất đó là cách nó dành cho Bash.
Joseph R.

Nếu bạn cần chắc chắn về vị trí của mình, bạn tốt nhất nên sử dụng đường dẫn đầy đủ mọi lúc. Nếu bạn cần thay đổi thư mục trong tập lệnh và quay lại từ đầu, trước tiên hãy lưu nó dưới dạng biến với $ (tên cơ sở $ (readlink -f $ 0)) hoặc $ (pwd) hoặc bất cứ nơi nào bạn muốn chạy mọi thứ và tắt vị trí cơ sở về điều đó thay vì giả định .. sẽ làm những gì bạn muốn. Nó cũng sẽ tương thích hơn với các shell khác có thể có hành vi khác một lần nữa.
Justin

Câu trả lời:


8

Bởi vì bash (và có thể là các shell khác) theo dõi đường dẫn bạn đi xuống, bao gồm cả các liên kết tượng trưng, ​​để làm cho dấu vết của bạn trở lại trông giống như đường xuống.

Bash biết làm thế nào bạn có được thư mục làm việc bởi vì cdphải là một shell được tích hợp sẵn. Khi bạn chạy ls ..shell, không thể thay thế "đường dẫn biểu tượng" bởi vì grep ..nó cũng hợp lệ và việc dịch ..sẽ rất khó hiểu.

Như vậy, cái vỏ hiện có hai cách hiểu ..có thể được tranh luận là khó hiểu như thể nó không bao giờ cố gắng giúp đỡ cả.


1
..nên là thư mục mẹ của thư mục bạn đang ở (và nên được lưu trong nút của thư mục bạn hiện đang ở). Không nên có sự mơ hồ. Tuy nhiên, tôi thích hành vi bash vì tôi thường muốn quay lại thư mục mà liên kết đã ở (nhưng cd -thường đủ để làm điều đó, mặc dù ... và pushd/ popdcó thể giúp đỡ nếu chúng ta nhớ sử dụng chúng). Imo, mặc định sẽ được chuyển đến thư mục gốc vật lý và một tùy chọn cho phép quay lại thư mục của liên kết (rằng nó có thể bị đảo ngược vì một số khả năng tương thích / lý do thông minh khác?)
Olivier Dulac
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.