วิธีที่เหมาะสมในการทำเช่นนี้คือการใช้-n, --no-dereferenceตัวเลือกเช่นนั้น
$ ln -snf foo2 bar
นี่เป็นสาเหตุlnให้ถือว่า symlink ที่มีอยู่เป็นไฟล์ มิฉะนั้นจะ dereferences barเพื่อfoo1, ลงมาfoo1และใช้เดิมTARGETชื่อเป็นLINK_NAMEและที่ว่าทำไมคุณท้ายด้วย symlink ที่จะfoo2ถูกสร้างขึ้นภายในfoo1ไดเรกทอรี manpage ที่lnระบุต่อไปนี้ ...
-n, - ไม่มีการอ้างถึง
ถือว่า LINK_NAME เป็นไฟล์ปกติหากเป็นลิงก์สัญลักษณ์ไปยัง
ไดเรกทอรี
ด้านล่างนี้คือเอาต์พุตเชลล์บนเดสก์ท็อป Arch Linux ที่มีเวอร์ชัน 8.21 lnโดยมีและไม่มี--no-dereferenceตัวเลือกฉันได้ผลลัพธ์เดียวกันกับที่คุณทำโดยไม่มี--no-dereferenceตัวเลือก แต่ใช้--no-dereferenceตัวเลือกที่ได้ผลตามที่คาดหวัง
$ 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อะไร?