运行以下命令按预期工作,创建一个符号链接src
from include/bb
:
ln -sf ../src include/bb
Run Code Online (Sandbox Code Playgroud)
但是,再次调用相同的命令将导致src
在include/bb
aka 中创建额外的符号链接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
) 强制替换该文件。