让我通过屏幕截图显示我的问题。
This is my first terminal。我改变了另一个终端的链接说terminal2。我的问题在this屏幕截图中突出显示。在我将链接更改为test2之后,ls
返回test1文件夹的内容。
答案 0 :(得分:2)
令你感到困惑的是,pwd
builtin实际上并没有告诉你当前的工作目录 - 它告诉你用来到当前工作目录的路径。
如果您想要实际的当前工作目录,则需要-P
标志:
$ pwd -P
会为您提供类似/home/darkknight/test1
。
答案 1 :(得分:1)
第二次拨打readlink
并没有按照您的想法进行操作
darkknight@localhost:~/test$ readlink \`pwd`/home/darkknight/test2`
手册页中readlink
的说明是
在标准输出上显示符号链接的值
readlink
是一个只读操作。在此之后,您还会发现$?
的值为非零,这意味着这已失败,因为test2
不是符号链接。
将其替换为对ln -s -f
的另一次调用(其中-f代表强制)......
darkknight@localhost:~$ ln -s -f test2 test
并非所有发行版都尊重-f
,因此您可能必须首先删除符号链接:
darkknight@localhost:~$ rm test; ln -s test1 test
答案 2 :(得分:1)
现在我从另一个终端更改到test2的链接:命令应该是
rm -fr test;ln -s test2 test; cd test
答案 3 :(得分:1)
您描述的是预期的行为。
$ mkdir test1
$ mkdir test2
$ touch test1/t1
$ touch test2/t2
$ ln -s test1 test
$ cd test
$ ls
t1
$ rm ../test
$ ln -s test2 ../test
$ readlink ../test
test2
$ ls
t1
$
简单地想象一下,当你cd test
实际进入test1
时。然后,您可以将符号链接test
更改为您想要的任何内容 - 甚至删除它! - 您仍然在test1
。
$ pwd
test
$ readlink `pwd`
test2
$
当然,readlink
会返回test2
,然后阅读已更改为test
的当前 test2
链接。但是,当时你cd
进入test
,链接 到test1
。而你仍然在test1
目录。
当然,如果现在您更改为测试目录,您将进入test2
。
$ cd ../test
$ ls
t2
$
最后一件事,澄清一下。目录test
不存在。您无法输入也不能进入此目录。只要您cd test
,就可以输入test
符号链接当前指向的目录(此处为test1
)。
在您进入test1
目录后,您可以将test
符号链接更改为您想要的任何内容,您仍然会在test1
。