当我cd
链接时,我的当前路径以链接的路径为前缀,而不是链接链接到的目录的路径。例如
~/dirlinks/maths$ ls -l logic
lrwxrwxrwx 1 tim tim 71 Jul 27 10:24 logic -> /windows-d/academic discipline/study objects/areas/formal systems/logic
~/dirlinks/maths$ cd logic
~/dirlinks/maths/logic$ pwd
/home/tim/dirlinks/maths/logic
~/dirlinks/maths/logic$ cd ..
~/dirlinks/maths$
我想将当前路径更改为链接目录的路径,以便我也可以使用链接目录的父目录。除了通过ls
链接找出链接的目录,然后cd
进入其中之外,还有哪些更简单的方法可以实现这一点?例如,cd
进入链接后,如何将当前路径更改为链接目录的路径?
答案1
使用 POSIX shell,您可以使用-P
以下选项光盘内置:
cd -P <link>
与bash
, 从man bash
:
-P 选项表示使用物理目录结构而不是遵循符号链接(另请参阅 set 内置命令的 -P 选项)
答案2
类似 Korn 的 shell 跟踪当前目录路径中的符号链接(这称为逻辑当前目录跟踪)。如果要展开所有符号链接,请将选项传递-P
给cd
内置函数(用于物理当前目录跟踪):
cd -P logic
如果您位于通过符号链接访问的目录中,并且想要将跟踪的当前目录切换到符号链接展开的路径,请运行
cd -P .
如果要打印当前目录的路径并展开符号链接,请运行pwd -P
.在 bash 中,如果您想关闭逻辑跟踪,请运行set -P
;在 zsh 中,运行set -w
或setopt chase_links
.
答案3
您可以使用它readlink
来确定链接指向的位置,并提供此输出作为cd
.
cd "$(readlink <link>)"
在附加符号链接指向符号链接的情况下,readlink
将仅提供目标,除非您指定其选项之一来跟随符号链接到规范文件目标,例如readlink -f <link>
.
阅读链接- 打印符号链接或规范文件名的值
-f, --canonicalize
通过递归地跟踪给定名称的每个组件中的每个符号链接来规范化;除最后一个组件外的所有组件都必须存在-e, --canonicalize-existing
通过递归地跟踪给定名称的每个组件中的每个符号链接来规范化,所有组件都必须存在-m, --canonicalize-missing
通过递归地跟踪给定名称的每个组件中的每个符号链接来规范化,而不要求组件存在