La forma correcta de hacer esto es usar la -n, --no-dereference
opción de esta manera.
$ ln -snf foo2 bar
Esto hace ln
que se trate el enlace simbólico existente como un archivo. De lo contrario, se elimina referencias bar
a foo1
, desciende en foo1
y utiliza el original TARGET
nombre que el LINK_NAME
Y es por eso que terminan con un enlace simbólico al foo2
ser creado dentro del foo1
directorio. La página de manual ln
indica lo siguiente ...
-n, --no-dereference
trate LINK_NAME como un archivo normal si es un enlace simbólico a un
directorio
A continuación se muestra el resultado del shell en mi escritorio Arch Linux con la versión 8.21 de ln
con y sin la --no-dereference
opción, obtuve los mismos resultados que obtuviste sin la --no-dereference
opción, pero usar la --no-dereference
opción funcionó como se esperaba.
$ 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
?