Câu trả lời:
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.
ln -s ../some-dir/some-file some-file
vsln -s /dir/some-dir/some-file some-file
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 foo
thư 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ó foo
chắ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à FOO
biế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ữ ~/project
thay vì một project
thư mục trong thư mục chính của tôi.
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 Tab
phí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.
[directory name]: Not a directory
. Bất kỳ giải pháp có thể hơn?