MacOS: Làm thế nào để miền cd cd vào một symlink?


4

Tôi có một thư mục "abc". Tôi tạo một liên kết tượng trưng : ln -s abc abclink. nhưng sau đó, khi tôi gõ, cd abclinknó nói "Không có tệp hoặc thư mục như vậy".

Tôi có thể thấy liên kết, nó có quyền "lrwxr-xr-x", tại sao nó không hoạt động? Làm thế nào để làm cho nó hoạt động?


Tôi có cùng một vấn đề. Liên kết hoạt động tốt và mượt mà với Finder, nhưng các lệnh đầu cuối mang lại [directory name]: Not a directory. Bất kỳ giải pháp có thể hơn?
Scott Bigss

Câu trả lời:


7

Thông thường khi bạn gặp phải điều đó, mục tiêu của bạn không hợp lệ. tức là abc không tồn tại. Có, bạn có thể tạo liên kết tượng trưng cho những thứ không tồn tại.


Và có thể di chuyển một liên kết tượng trưng xung quanh? Để tạo nó ở đâu đó, để di chuyển nó dưới một thư mục khác, trong khi bảo tồn chức năng của nó?
Ecir Hana

1
Miễn là mục tiêu có một đường dẫn đầy đủ ... chắc chắn. nhưng đường dẫn tương đối có thể không hoạt động tốt. tức là ln -s ../some-dir/some-file some-filevsln -s /dir/some-dir/some-file some-file
TheCompWiz

Chà, bạn có thể tạo chúng ... chúng không hoạt động.
dmckee

@dmckee: không biết bạn đang nói về cái gì. Họ làm việc ... có thể không như bạn muốn họ làm việc. Bạn chỉ cần hiểu "lý do" họ làm việc theo cách của họ.
TheCompWiz

1

Tôi đã có một trường hợp sử dụng khó hiểu thêm, cuối cùng giống như câu trả lời được chấp nhận, thư mục đích không tồn tại, nhưng có thêm một sự thay đổi.

Tôi đã tạo một liên kết tượng trưng đến một thư mục được xác định trong một biến môi trường mà chúng ta sẽ gọi FOO:

$ FOO="~/project"
$ ln -s foo "$FOO"

Điều này dường như hoạt động tốt:

$ ls -al
lrwxr-xr-x   1 jondoe  jondoe    10 Feb 20 02:25 foo -> ~/project

Tuy nhiên, khi tôi cố gắng đi vào foothư mục, tôi sẽ gặp lỗi:

$ cd foo
-bash: cd: foo: No such file or directory

Điều này thật kỳ lạ, bởi vì chúng tôi chỉ thấy rằng nó foochắc chắn tồn tại. Hơn nữa, cũng vậy ~/project:

$ cd ~/project
$ ls -al
drwxr-xr-x  3 jondoe  jondoe  102 Feb 20 02:26 .
drwxr-xr-x  4 jondoe  jondoe  136 Feb 20 02:25 ..
-rw-r--r--  1 jondoe  jondoe    0 Feb 20 02:26 README.md

Làm thế nào mà symlink và thư mục mà nó trỏ đến cả hai tồn tại, nhưng tôi thực sự không thể sử dụng symlink?

Hóa ra nguyên nhân là FOObiến môi trường có dấu ngã ~trong đó. Vì tôi đã bao bọc biến này trong dấu ngoặc kép khi tạo symlink, dấu ngã không trải qua quá trình mở rộng bash và do đó, symlink kết quả chỉ đến đường dẫn chữ ~/projectthay vì một projectthư mục trong thư mục chính của tôi.


0

Một nguồn có thể của vấn đề này: nếu thư mục đích chứa khoảng trắng, bạn không cần đặt dấu ngoặc kép xung quanh giá trị được chèn bằng cách nhấn Tabphím, bởi vì Terminal thoát khỏi khoảng trắng có dấu gạch chéo ngược cho bạn.

Ví dụ: giả sử có một thư mục /tmp/Dir With Spaces/:

ln -s /tmp/Dir\ With\ Spaces link1      <-- This works
ln -s "/tmp/Dir With Spaces" link2      <-- As does this
ln -s "/tmp/Dir\ With\ Spaces" link3    <-- But this one doesn't

Bạn có thể thấy lý do tại sao bằng cách nhìn vào đầu ra từ ls -l:

lrwxr-xr-x    1 dave  staff          21 Jul 19 10:30 link1 -> /tmp/Dir With Spaces/
lrwxr-xr-x    1 dave  staff          21 Jul 19 10:31 link2 -> /tmp/Dir With Spaces/
lrwxr-xr-x    1 dave  staff          23 Jul 19 10:31 link3 -> /tmp/Dir\ With\ Spaces/

Hoặc thoát khỏi khoảng trắng trong đường dẫn bằng dấu gạch chéo ngược hoặc bao quanh đường dẫn không thoát trong dấu ngoặc kép, không phải cả hai.

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.