Sử dụng ~ trong mục tiêu liên kết tượng trưng hoặc tạo liên kết tượng trưng với một biến


7

Tôi muốn tạo một liên kết tượng trưng đến ~/foo/nhưng khi tôi viết nó, ~luôn luôn được giải quyết theo đường dẫn nhà tuyệt đối. Tôi đã sử dụng ../s trong quá khứ và chúng hoạt động tốt, ~không được phép?

Lý do tôi muốn làm điều đó là vì ~có đường dẫn tuyệt đối khác nhau tùy thuộc vào máy và Linux / OSX, nhưng luôn trỏ đến thư mục chính của tôi.

Tôi muốn bao gồm một liên kết như vậy trong một đồng bộ hóa git repo trên một số máy.


Có lẽ bạn nên thử sử dụng biến $ HOME thay vì ~.
Vinz

Đó chính xác là những gì tôi không muốn làm, bởi vì $HOMEsẽ luôn được giải quyết ngay khi tôi tạo liên kết (phải không?), Và do đó sẽ phụ thuộc vào máy.
Jonathan H

Câu trả lời:


6

Ký tự dấu ngã được mở rộng bằng shell trước khi lệnh được thực thi. Nó sẽ được thay thế bằng giá trị của $HOME. Vì vậy, lntiện ích tạo symlink sẽ không bao giờ nhìn thấy dấu ngã, chỉ có đường dẫn đầy đủ. Đường dẫn này sẽ được lưu trữ trong symlink.


Trong Linux , không có otion để tạo biến symlink. Chúng được xử lý bởi kernel. Hạt nhân không tôn vinh các biến môi trường.


BSD cho phép các liên kết như vậy. Chúng được gọi là các liên kết tượng trưng biến thể . Bạn có thể làm một cái gì đó như thế này:

$ ln -s ’${variable}’ linkname
$ ls -l linkname
lrwxrwxrwx 1 root root 6 Sep 29 12:33 linkname -> ’${variable}’

Với varsymcác biến đó sau đó có thể được đặt:

varsym variable=value cat linkname
[...] contents of file with name value [...]

2

Để giải quyết câu hỏi của bạn về các liên kết tượng trưng, ​​"không được phép?".

Trả lời: ~ không được phép. Nó sẽ cho phép bạn tạo một liên kết tượng trưng như vậy nhưng nó sẽ không giải quyết được thư mục chính khi được theo dõi.

ln -s \~ d
ls -ld d
lrwxrwxrwx 1 steve steve 1 Sep 29 11:28 d -> ~
ls d
d
cd d
cd: d: No such file or directory

1
Được rồi, tôi đoán tôi sẽ chỉ tạo một liên kết cho mỗi repo.
Jonathan H

Bất kỳ ký tự nào ngoại trừ Nul và / đều được phép trong thành phần tên đường dẫn UNIX. Ký tự ~ ở phía bên kia chỉ được mở rộng bởi các shell nhất định nếu ký tự xuất hiện trên dòng lệnh. Vì vậy, câu trả lời này là không hữu ích.
schily
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.