链接在另一个目录中时,符号链接无法正常工作?

use*_*643 8 bash symlink

哇,我以前从未真正使用过符号链接,但这真是令人难以置信:

bash-3.2$ echo "weird" > original.txt
bash-3.2$ mkdir originals
bash-3.2$ mv original.txt originals/
bash-3.2$ cat originals/original.txt 
weird
bash-3.2$ mkdir copies
bash-3.2$ ln -s originals/original.txt copies/copy.txt
bash-3.2$ cat copies/copy.txt 
cat: copies/copy.txt: No such file or directory
bash-3.2$ ls copies/copy.txt 
copies/copy.txt
bash-3.2$ ls -l copies/copy.txt 
lrwxr-xr-x  1 zach  staff  22 Dec 22 01:23 copies/copy.txt -> originals/original.txt
bash-3.2$ cat originals/original.txt 
weird
bash-3.2$ cat copies/copy.txt 
cat: copies/copy.txt: No such file or directory
bash-3.2$ cd copies/
bash-3.2$ cat copy.txt 
cat: copy.txt: No such file or directory
Run Code Online (Sandbox Code Playgroud)

为什么我不能在复制目录中捕捉符号链接?

如果我从副本中创建符号链接,我可以很好地捕捉它.如果我在当前目录中创建符号链接,我也可以很好地捕捉它.如果我在当前目录中创建符号链接,然后将其移动到副本/,我得到"copies/copy.txt:没有这样的文件或目录".

kev*_*kev 18

如果创建符号链接的相对路径,则会将其存储为相对符号链接.符号链接相对于链接所在的位置,而不是创建或打开链接的位置.


请使用相对于链接的绝对路径或路径.

更改:

ln -s originals/original.txt copies/copy.txt
Run Code Online (Sandbox Code Playgroud)

至:

# absolute
ln -s /path/to/originals/original.txt copies/copy.txt

# relative
cd copies
ln -s ../originals/original.txt copy.txt
Run Code Online (Sandbox Code Playgroud)


Rag*_*ram 5

您还可以使用相对路径来实现此目的.喜欢

cd copies
ln -s ../originals/original.txt copy.txt
Run Code Online (Sandbox Code Playgroud)

这会奏效

当您打开它试图从副本目录引用该文件的符号链接时,由于该链接不存在,您将收到该错误.

当您使用相对或绝对路径时,此问题将得到解决.