我有以下目录结构:
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处理..正确,但猫没有.什么是这种巫术,我如何按照我希望的方式让事情发挥作用?
编辑
好的,多亏了这里的一些答案,我已经发现了更多关于发生了什么的事情.首先,cd实际上不是可执行文件,它是shell的内置命令(在本例中为bash):
misha@misha-lmd:~/tmp$type cd
cd is a shell builtin
如果你是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
事情正在失败,因为..被解释为物理父目录,而不是逻辑目录.这允许我将我的问题细化为:
当我为可执行文件指定命令行参数时,我怎么能得到…表示逻辑父,而不是物理父?
解决方法:
因为符号链接目录中的目录..是您的主目录.
../something意味着“转到..目录”,而不是“剥离最后一个路径组件”.
更改为符号链接后,您可以尝试使用pwd -P查看您的位置.