Tim*_*Tim 13 shell cd-command symlink
当我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$
Run Code Online (Sandbox Code Playgroud)
我希望将当前路径更改为链接目录的路径,以便我也可以使用链接目录的父目录。除了ls
找出链接目录的链接,然后cd
进入它,还有哪些更简单的方法可以实现这一目标?例如,cd
进入链接后,如何将当前路径更改为链接目录的路径?
cuo*_*glm 23
使用 POSIX shell,您可以使用cd内置-P
选项:
cd -P <link>
Run Code Online (Sandbox Code Playgroud)
与bash
,来自man bash
:
-P 选项表示使用物理目录结构而不是跟随符号链接(另请参阅 set 内置命令的 -P 选项)
类似 Korn 的 shell 会跟踪当前目录路径中的符号链接(这称为逻辑当前目录跟踪)。如果要展开所有符号链接,请将选项传递-P
给cd
内置(用于物理当前目录跟踪):
cd -P logic
Run Code Online (Sandbox Code Playgroud)
如果您位于通过符号链接访问的目录中,并且想要将跟踪的当前目录切换到扩展了符号链接的路径,请运行
cd -P .
Run Code Online (Sandbox Code Playgroud)
如果要打印扩展符号链接的当前目录的路径,请运行pwd -P
. 在 bash 中,如果要关闭逻辑跟踪,请运行set -P
; 在 zsh 中,运行set -w
或setopt chase_links
.
小智 5
您可以使用readlink
来确定链接指向的位置,并将此输出作为cd
.
cd "$(readlink <link>)"
Run Code Online (Sandbox Code Playgroud)
在指向符号链接的附加符号链接的情况下,readlink
将简单地提供目标,除非您指定它的选项之一以跟随符号链接到规范文件目标,例如readlink -f <link>
.
readlink - 打印符号链接或规范文件名的值
-f, --canonicalize
通过递归跟踪给定名称的每个组件中的每个符号链接来规范化;除了最后一个组件之外的所有组件都必须存在-e, --canonicalize-existing
通过递归遵循给定名称的每个组件中的每个符号链接来规范化,所有组件都必须存在-m, --canonicalize-missing
通过递归跟踪给定名称的每个组件中的每个符号链接来规范化,而不要求组件存在
归档时间: |
|
查看次数: |
6994 次 |
最近记录: |