Tạo một liên kết tượng trưng tuyệt đối đến thư mục hiện tại


12

Bây giờ tôi đang ở dưới một thư mục với con đường rất dài. Để truy cập nó trong tương lai nhanh hơn, tôi muốn tạo một liên kết đến nó.

Tôi đã thử

ln -s . ~/mylink

~/mylinkthực sự liên kết đến ~. Vì vậy, tôi có thể mở rộng ~thành tên đường dẫn lỗi thời, và sau đó cung cấp cho nó ln?

Câu trả lời:


19

Một liên kết tượng trưng thực sự lưu trữ đường dẫn bạn đưa ra theo nghĩa đen, dưới dạng một chuỗi¹. Điều đó có nghĩa là liên kết của bạn ~/mylinkchứa " ." (một ký tự). Khi bạn truy cập vào liên kết, đường dẫn đó được diễn giải liên quan đến vị trí của liên kết, thay vì nơi bạn ở khi bạn tạo liên kết.

Thay vào đó, bạn có thể lưu trữ đường dẫn thực tế bạn muốn trong liên kết:

ln -s "$(pwd)" ~/mylink

sử dụng thay thế lệnh để đặt đầu ra của pwd(tên thư mục làm việc) vào dòng lệnh của bạn. lnnhìn thấy đường dẫn đầy đủ và lưu nó vào liên kết tượng trưng của bạn, sau đó sẽ trỏ đến đúng nơi.

¹ Nhiều hơn hoặc ít hơn.


2
Xem thêm "$PWD"trong vỏ POSIX và ~0trong zsh.
Stéphane Chazelas

7

Bạn nên sử dụng:

ln -s "$(cd . && pwd)" ~/mylink

hoặc là:

ln -s "$(pwd -P)" ~/mylink

để có được kết quả đúng cho thư mục làm việc hiện tại. Nó có thể được thay đổi trong khi bạn đang làm việc trong nó như trong câu hỏi này .


1
Cái đầu tiên sẽ không nhất thiết phải giúp trong tất cả các shell (xem câu trả lời này ). OP có thể muốn sử dụng $PWD(đường dẫn anh ta đã sử dụng để đến đó), chứ không phải $(pwd -P)(đường dẫn chính tắc đến thư mục hiện tại). Nếu $PWDkhông còn trỏ đến thư mục hiện tại, thì cũng không có gì để nói $(pwd -P)trong một phút tiếp theo.
Stéphane Chazelas


@ StéphaneChazelas: Bạn có thể thấy "$PWD"vẫn có giá trị cũ nếu direcory hiện tại bị di chuyển. PWDchỉ được đặt khi bạn cdhoặc khởi tạo bởi trình bao.
cuonglm

Nhưng điều tôi đang nói là OP có khả năng muốn $ PWD cũ hơn một số đường dẫn tuyệt đối đến thư mục làm việc hiện tại và trong một số shell (ksh93, ash, yash), như đã giải thích rằng việc gọi điện thoại cdkhông được đảm bảo để thực hiện $ PWD hoặc đầu ra của pwd một đường dẫn đến thư mục hiện tại. Bạn đang cố gắng bảo vệ chống lại điều gì đó không có khả năng xảy ra, nhưng trong giải pháp đầu tiên, điều đó không nhất thiết phải hiệu quả và trong lần thứ hai, đó là thay đổi hành vi.
Stéphane Chazelas

1
Nếu ai đó làm mv sau khi bạn làm ln, thì bạn sẽ rơi vào tình huống tương tự. Mặt khác, nếu anh ta làm vậy cd /long/logical/path/to/some/directory, bạn không muốn liên kết trỏ đến /vg0/lv1/user2/app4(đường dẫn chính tắc) vì liên kết sẽ trỏ đến vị trí sai khi /long/logical/path/to/some/directorytrỏ đến một nơi khác.
Stéphane Chazelas
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.