Cách thích hợp để làm điều này là sử dụng --no-dereference
tùy chọn như vậy.
$ ln -snf foo2 bar
Điều này gây ra ln
để coi các liên kết tượng trưng hiện có như một tập tin. Nếu không, nó là hội nghị bar
đến foo1
, đi xuống foo1
và sử dụng bản gốc TARGET
tên như LINK_NAME
và đó là lý do tại sao bạn kết thúc với một liên kết tượng trưng đến foo2
được tạo ra bên trong foo1
danh mục. Trang web trên ln
tuyên bố như sau ...
-n, --no-dereference
treat LINK_NAME as a normal file if it is a symbolic link to a
directory
Dưới đây là kết quả đầu ra trên màn hình Arch Linux của tôi với phiên bản 8.21 của ln
có và không có --no-dereference
tùy chọn, tôi đã nhận được kết quả giống như bạn đã làm mà không có --no-dereference
tùy chọn, nhưng sử dụng tùy chọn --no-dereference
tùy chọn nó hoạt động như mong đợi.
$ 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
?