Cara yang tepat untuk melakukan ini adalah dengan menggunakan -n, --no-dereferenceopsi seperti itu.
$ ln -snf foo2 bar
Ini menyebabkan lnuntuk memperlakukan symlink yang ada sebagai file. Kalau tidak, itu referensi barke foo1, turun ke foo1dan menggunakan TARGETnama asli sebagai LINK_NAMEdan itu sebabnya Anda berakhir dengan symlink untuk foo2dibuat di dalam foo1direktori. Halaman manual lnmenyatakan 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 lndengan dan tanpa --no-dereferenceopsi, saya mendapatkan hasil yang sama seperti yang Anda lakukan tanpa --no-dereferenceopsi, tetapi menggunakan --no-dereferenceopsi 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?