WYS*_*WYG 8 cd-command symlink cwd
我想创建一个单向符号链接,即我可以使用它转到目标目录,但无法返回。
假设有一个目录,D
其中包含两个子目录S1
和S2
. 我想创建一个链接S1
,它指向S2
(比方说ls2 -> ../S2/
)。如果我这样做cd ls2
,然后cd ..
然后,我想去D
和不S1
。
是否可以?
Gil*_*il' 21
所有符号链接都是单向的。就内核而言,进入/D/S1
并运行后chdir("ls2")
,您就进入了/D/S2
,所以如果您运行chdir("..")
,您最终进入/D
.
如果您在 shell 中执行此操作,则在
cd /D/S1
cd ls2
cd ..
Run Code Online (Sandbox Code Playgroud)
你最终在/D/S1
. 原因是 shell 自己跟踪当前目录,并记住符号链接。
您不能逐个链接地禁用此 shell 行为,但可以在运行cd
命令时禁用它。运行后cd ls2
,shell 会记住当前目录为/D/S1/ls2
:
$ pwd
/D/S1
$ cd ls2
$ pwd
/D/S1/ls2
$ cd ..
$ pwd
/D/S1
Run Code Online (Sandbox Code Playgroud)
要指示 shell 忘记其符号链接感知当前目录跟踪,请将-P
选项传递给cd
. 该pwd
命令还有一个-P
选项。
$ pwd
/D/S1
$ cd ls2
$ pwd
/D/S1/ls2
$ pwd -P
/D/S2
$ cd -P ..
$ pwd
/D
Run Code Online (Sandbox Code Playgroud)
当您更改为符号链接时,您也可以忘记逻辑跟踪:
$ pwd
/D/S1
$ cd -P ls2
$ pwd
/D/S2
$ cd ..
$ pwd
/D
Run Code Online (Sandbox Code Playgroud)