Cara yang tepat untuk melakukan ini adalah dengan menggunakan -n, --no-dereference
opsi seperti itu.
$ ln -snf foo2 bar
Ini menyebabkan ln
untuk memperlakukan symlink yang ada sebagai file. Kalau tidak, itu referensi bar
ke foo1
, turun ke foo1
dan menggunakan TARGET
nama asli sebagai LINK_NAME
dan itu sebabnya Anda berakhir dengan symlink untuk foo2
dibuat di dalam foo1
direktori. Halaman manual ln
menyatakan berikut ...
-n, --tidak ada dereferensi
memperlakukan LINK_NAME sebagai file normal jika itu adalah tautan simbolis ke a
direktori
Di bawah ini adalah output shell pada desktop Arch Linux saya dengan versi 8.21 ln
dengan dan tanpa --no-dereference
opsi, saya mendapatkan hasil yang sama seperti yang Anda lakukan tanpa --no-dereference
opsi, tetapi menggunakan --no-dereference
opsi itu berfungsi seperti yang diharapkan.
$ mkdir foo1 foo2
$ ln -s foo1 bar
$ ls -l bar
lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1
$ ln -sf foo2 bar
$ ls -l bar
lrwxrwxrwx 1 drew users 4 Sep 17 12:51 bar -> foo1
$ ls -l foo1
total 0
lrwxrwxrwx 1 drew users 4 Sep 17 12:51 foo2 -> foo2
$ ln -snf foo2 bar
$ ls -l bar
lrwxrwxrwx 1 drew users 4 Sep 17 12:52 bar -> foo2
ln --version
?