如何防止符号链接在自身内部创建?

zen*_*hoy 5 bash symlink

运行以下命令按预期工作,创建一个符号链接srcfrom include/bb

ln -sf ../src include/bb
Run Code Online (Sandbox Code Playgroud)

但是,再次调用相同的命令将导致srcinclude/bbaka 中创建额外的符号链接src/src

我能做些什么来防止它?


编辑:

显然,当ln被调用两次时会发生这种情况,毕竟分号可能与它无关。

下面是导致这种情况发生的一系列命令:

mkdir test
cd test
mkdir src
touch src/main.cpp
mkdir include
ln -sf ../src include/bb
ln -sf ../src include/bb
Run Code Online (Sandbox Code Playgroud)

小智 6

ln -s ../src include/bb
Run Code Online (Sandbox Code Playgroud)

无论是创建一个名为链接include/bb引用../src(相对于它的位置),或者创建一个文件include/bb/src引用../src(相对于它的位置)。后者是如果include/bb存在并且是目录(实际上或作为目录的链接)的情况。

因此,当您执行一次命令后,现在有一个链接include/bb指向目录src,同级到include. 即,include/bb现在是一个目录。因此,当您随后执行该命令时,src会在该目录中添加一个名为的新链接。

它与;.

您可能打算使用

ln -sTf ../src include/bb
Run Code Online (Sandbox Code Playgroud)

相反,为了 (by -T) 告诉ln将任何现有include/bb文件视为纯文件(即使它是引用目录的链接),并且 (by -f) 强制替换该文件。