Symlink đến thư mục hiện tại là đường dẫn tuyệt đối mà không cần nhập toàn bộ đường dẫn


10

Symlinks là các phím tắt được lưu cho các đường dẫn tương đối:

~/foo ln -s . ~/bar/foo
~/foo ls -l ~/bar
total 8
lrwxr-xr-x    1 me  me     1B 15 May 14:38 foo -> .

Các tập tin ~/bar/foolà một liên kết tượng trưng đến barthư mục hiện tại, tức là chính nó

Điều gì xảy ra nếu tôi muốn tạo một liên kết tượng trưng trong một thư mục khác vào thư mục mà tôi đang ở vào thời điểm đó? Vì vậy, trong ví dụ trên, tôi tham gia ~/foovà tôi muốn tạo ~/bar/foonhư một liên kết tượng trưng ~/foo. Tất nhiên thư mục hiện tại của tôi có thể dài hơn 5 ký tự và có thể không dễ gõ.

Câu trả lời:


13

Tôi sẽ nói loại

ln -s $PWD ~/bar/

hoặc là

ln -s `pwd` ~/bar/

Bạn cũng có thể sử dụng

ln -s $PWD ~/bar/

nhưng tôi đoán bạn biết điều đó và đó không phải là những gì bạn đang chăm sóc. Vì vậy, xin vui lòng bạn có thể cập nhật câu hỏi của bạn để giải thích mục tiêu của bạn là gì?

Nếu đường dẫn chứa khoảng trắng, thì nên sử dụng:

ln -s "$PWD" ~/bar/

2
Trích dẫn kép các $biến và lệnh thay thế của bạn, nếu không, tên tệp có khoảng trắng sẽ làm tăng tốc độ chạy. Bạn cũng không cần kết thúc $(basename $PWD)(và bạn đã quên một $(và trích dẫn :-))) vì dù sao đó cũng là tên liên kết mặc định.
Daniel Andersson

Tôi nghĩ rằng tôi đã được ngu ngốc. Tôi nghĩ rằng tôi đã thử pwdcách tiếp cận và một cái gì đó đã đi sai. Hãy đặt nó xuống một lỗi ID-ten-T
Gareth

@DanielAndersson bạn nói đúng rằng nó không hỗ trợ các khoảng trắng trên đường dẫn. Điểm tốt. vì vậy để ghi lại tôi sẽ cập nhật câu trả lời :)
Huygens

4

Chắc chắn rồi:

ln -s "$(readlink -f .)" ~/bar

(có thể tốt cho tính tổng quát trong các tập lệnh) hoặc chỉ

ln -s ~/foo ~/bar

Tương đối:

ln -s ../foo ~/bar

Hoàn thành tab sẽ giúp bạn gõ.


Từ nhận xét của grawity và http://lists.gnu.org/archive/html/coreutils-announce/2012-03/msg00000.html :

* Những thay đổi đáng chú ý trong phiên bản 8.16 (2012-03-26) [ổn định]

...

lnbây giờ chấp nhận --relativetùy chọn, để tạo liên kết tượng trưng tương đối đến mục tiêu, bất kể cách xác định mục tiêu.

Vì vậy, với phiên bản này:

ln -s --relative . ~/bar

nên hoạt động (với trong thực tế là giống hệt ví dụ đầu tiên của bạn, với việc bổ sung công --relativetắc).


4
Coreutils mới nhất có thể tự động tạo liên kết tượng trưng tương đối bằng cách sử dụng ln -s -r foo ~/bar.
dùng1686

@grawity: Thú vị. Chưa có trên hệ thống của tôi, rõ ràng (Debian Sid).
Daniel Andersson

Nó dường như đã được thêm vào v8.16 vào ngày 22 tháng 3, theo git.
dùng1686

1
Ngoài ra, lợi thế của $(readlink -f .)hơn là $PWDgì?
dùng1686

2
@grawity: Không nhiều. Chúng hoạt động khác nhau nếu thư mục làm việc hiện tại đã được liên kết. readlink -fsau đó sẽ liên kết tới đường dẫn đích tuyệt đối của thư mục hiện tại, trong khi đó $PWDsẽ liên kết với thư mục bằng chữ hiện tại. Điều gì muốn có thể khác nhau theo thời gian, và trước hết có lẽ không phải là vấn đề.
Daniel Andersson
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.