我有以下目录结构:
misha@misha-lmd:~/tmp$ ls -l
total 4.0K
-rw-r--r-- 1 misha lmd 21 Feb 18 21:00 hello.py
lrwxrwxrwx 1 misha lmd 20 Feb 18 21:01 symlink -> /home/misha/nobackup/
接下来,我尝试以下操作:
misha@misha-lmd:~/tmp$ cd symlink
misha@misha-lmd:~/tmp/symlink$ cat ../hello.py
cat: ../hello.py: No such file or directory
为什么这不起作用?
如果我这样做:
misha@misha-lmd:~/tmp/symlink$ cd ..
misha@misha-lmd:~/tmp$ cat hello.py
print "Hello World!"
那么一切都很好。cd 处理 .. 正确,但 cat 没有。这是什么魔法,我如何让事情按照我想要的方式运作?
编辑
好的,多亏了这里的一些答案,我对发生的事情有了更多的了解。首先,cd
它实际上不是可执行文件,它是 shell 的内置命令(在本例中为 bash):
misha@misha-lmd:~/tmp$ type cd
cd is a shell builtin
如果你man bash
,你可以找到所有关于 bash 用于其内务管理的环境变量,包括在目录中移动。还有其他内置函数,例如pwd
,具有实际上是可执行文件的对应项:
misha@misha-lmd:~/tmp/symlink$ type pwd
pwd is a shell builtin
misha@misha-lmd:~/tmp/symlink$ /bin/pwd
/home/misha/nobackup
misha@misha-lmd:~/tmp/symlink$ /bin/pwd -L
/home/misha/tmp/symlink
/bin/pwd
可执行文件默认打印物理路径,但也可以打印给定“-L”开关的逻辑路径。同样,当我尝试这样做时:
misha@misha-lmd:~/tmp/symlink$ cat ../hello.py
cat: ../hello.py: No such file or directory
事情失败了,因为..
被解释为物理父目录,而不是逻辑目录。这使我可以将我的问题细化为:
当我为可执行文件指定命令行参数时,我如何才能..
表示逻辑父级,而不是物理父级?