$ cd ~
$ ln -s /real/folder symbolic_link
$ cd symbolic_link
$ cd ..
$ ls -l
symbolic_link -> /real/folder/
$ cd symbolic_link
$ ls -l ..
folder
Run Code Online (Sandbox Code Playgroud)
换句话说,为什么 的行为与您在符号链接目录中时的行为cd ..不同ls ..?
您的 shell 会跟踪引导您进入当前工作目录的符号链接。cd是一个内置的 shell 并help cd指出(来自 的示例bash):
选项:
-L强制遵循符号链接:在处理..
-P使用物理目录结构的实例后解析 DIR 中的符号链接而不遵循符号链接:在处理..
[...]
的实例之前解析 DIR 中的符号链接默认是遵循符号链接,就像-L被指定。
你可以试试看cd -P ..区别。另一个例子是pwd -Land pwd -P(whilepwd也是一个内置的 shell)。
请注意,可以通过set -P和更改默认行为set +P。有关help set更多详细信息,请参阅。
另一方面ls是一个单独的可执行文件,它不会从你的 shell 的这种跟踪能力中受益。但是,您可以使用此技巧使其遵循符号链接:
(cd -L .. && ls -l)
Run Code Online (Sandbox Code Playgroud)
基本上我们cd用来更改与符号链接相关的当前工作目录(我明确使用了默认-L选项),然后调用ls -l. 这&&操作装置ls只有将执行cd成功。括号()使里面的所有内容都在子shell中执行。这就是诀窍:cd命令只影响这个子shell,在你的主shell中没有任何变化,不需要cd返回。
| 归档时间: |
|
| 查看次数: |
1115 次 |
| 最近记录: |