防止 'cd' 记住遍历的符号链接

防止 'cd' 记住遍历的符号链接

假设您有一个目录 ~/mytool,它软链接到 /usr/local/mytool。然后cd mytool将当前目录保留为 ~/mytool,这可能会导致脚本行为不正确。有没有办法避免这种行为?

通过谷歌搜索,我发现您可以按如下方式实现此目的:

cd $1 ; cd `pwd -P`

没有“cd”开关吗?环境变量?

答案1

如果您set -P在 bash 中输入所有命令(例如 cd、pwd),它们都会遵循物理路径。否则,您可以使用cd -Ppwd -P来临时更改默认行为。

来自 bash 的手册页:

          -P      If  set,  the shell does not follow symbolic links when executing commands such as cd that change the cur-
                  rent working directory.  It uses the physical directory structure instead.  By default, bash  follows  the
                  logical chain of directories when performing commands which change the current directory.

为了使其永久存在,请将其放入您的~/.bashrc文件中。

答案2

“cd” 是大多数 shell 的内置命令。在 bash 中,您可以通过添加

set -P

在启动脚本(例如 .bashrc)中。

答案3

在 Ubuntu/Debian(不确定 BSD 是否如此)上,cd -P symlink将我置于已解析的符号链接路径中。(与 pwd -P 的行为相同)

测试使用:

mkdir a
ln -s a b
cd -P b && pwd

相关内容