Jawaban:
Biasanya ketika Anda mengalami itu, target Anda tidak valid. yaitu abc tidak ada. Ya, Anda dapat membuat tautan ke hal-hal yang tidak ada.
ln -s ../some-dir/some-file some-file
vsln -s /dir/some-dir/some-file some-file
Saya memiliki kasus penggunaan yang membingungkan yang akhirnya sama dengan jawaban yang diterima - direktori tujuan tidak ada - tetapi dengan twist tambahan.
Saya sedang membuat symlink ke direktori yang ditentukan dalam variabel lingkungan yang akan kita panggil FOO
:
$ FOO="~/project"
$ ln -s foo "$FOO"
Ini sepertinya bekerja dengan baik:
$ ls -al
lrwxr-xr-x 1 jondoe jondoe 10 Feb 20 02:25 foo -> ~/project
Namun, ketika saya mencoba masuk ke foo
folder, saya akan mendapatkan kesalahan:
$ cd foo
-bash: cd: foo: No such file or directory
Ini aneh, karena kami baru saja melihatnya foo
pasti ada. Selain itu, demikian juga ~/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
Bagaimana symlink dan folder yang menunjuk keduanya ada, tetapi saya tidak bisa menggunakan symlink?
Ternyata penyebabnya adalah bahwa FOO
variabel lingkungan memiliki tilde ~
di dalamnya. Karena saya membungkus variabel ini dalam tanda kutip ketika membuat symlink, tilde tidak melalui ekspansi bash, sehingga symlink yang dihasilkan menunjuk ke path literal, ~/project
bukan project
folder di direktori home saya.
Sumber kemungkinan masalah ini: jika direktori target berisi spasi, Anda tidak perlu memberi tanda kutip di sekitar nilai yang dimasukkan dengan menekan Tab
tombol, karena Terminal lolos dari spasi dengan garis miring terbalik untuk Anda.
Misalnya, dengan asumsi ada direktori /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
Anda dapat melihat alasannya dengan melihat output dari 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/
Entah melarikan diri dari spasi di jalur dengan garis miring terbalik, atau lampirkan jalur yang tidak dilepas dalam tanda kutip, tidak keduanya.
[directory name]: Not a directory
. Ada solusi yang lebih mungkin?