假设我执行以下操作:
cd /some/path
ln -s /target/path symbolic_name
Run Code Online (Sandbox Code Playgroud)
如果那么做:
cd /some/path
cd symbolic_name
pwd
Run Code Online (Sandbox Code Playgroud)
我得到:
/some/path/symblic_name
Run Code Online (Sandbox Code Playgroud)
并不是:
/target/path
Run Code Online (Sandbox Code Playgroud)
有没有办法让shell“完全解析”一个符号链接(即更新CWD等),就好像我已经直接做了:
cd /target/path
Run Code Online (Sandbox Code Playgroud)
?
我需要运行一些似乎“知道”或“敏感”我如何到达目标路径的程序,我希望他们认为我到达目标路径就像cd /target/path
直接完成一样。
当我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
进入链接后,如何将当前路径更改为链接目录的路径?
请尝试运行以下脚本:
#!/bin/bash
mkdir a
mkdir a/asub
mkdir b
ln -sfr a/asub b/bsub
touch a/this_file_is_in_a
touch b/this_file_is_in_b
cd b/bsub
echo "I'm in directory: $(pwd)"
echo This is the contents of the upper directory:
ls ..
Run Code Online (Sandbox Code Playgroud)
你希望得到什么?可能是目录的内容b
。然而,事实并非如此。我已经在目录中运行了它/tmp/bb
。
下面是结果:
wzab@WZabHP:/tmp/bb$ ./ls_tester.sh
I'm in directory: /tmp/bb/b/bsub
This is the contents of the upper directory:
asub this_file_is_in_a
Run Code Online (Sandbox Code Playgroud)
因此,尽管pwd
返回的正确路径是b
子目录,但“..”指的是a
子目录。是我对符号链接的理解不正确,还是Linux中的一个错误?
我正在阅读 Sobell 的《Linux 命令、编辑器和 Shell 编程实用指南》,4e。早些时候,他谈到了.
和..
,并说它们是工作目录和工作目录父目录的“路径名的同义词”。我的问题是我是否应该将它们视为相对路径名或绝对路径名的同义词。最后,我认为我的误解与不了解 Linux 系统如何解析路径名有关。
举个例子:假设我输入如下命令
cd ..
我是否应该将 shell 视为用 .. 替换当前工作目录的父目录的绝对路径名?或者,当我给出相对路径名时,“分辨率”的行为是否有所不同(这里似乎是这种情况,因为我没有以斜杠 / 开始我的路径)?在某种程度上,我想这个问题可以表述为“相对路径命名是绝对路径命名的特殊情况吗?因为每个相对路径名都替换为适当的绝对路径?”