【发布时间】:2013-02-18 12:05:48
【问题描述】:
我的目录结构如下:
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
事情失败了,因为.. 被解释为物理父目录,而不是逻辑目录。这让我可以细化我的问题:
当我为可执行文件指定命令行参数时,如何让.. 表示逻辑父级,而不是物理父级?
【问题讨论】:
-
什么是
/home/misha/nobackup/?它是现有目录吗?
标签: linux bash command-line