gpt4 book ai didi

linux - 为什么我不能从符号链接(symbolic link)中处理 ".."中的文件?

转载 作者:可可西里 更新时间:2023-11-01 11:49:46 24 4
gpt4 key购买 nike

我有以下目录结构:

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

事情失败了,因为 .. 被解释为物理 父目录,而不是逻辑目录。这使我可以细化我的问题:

当我为可执行文件指定一个命令行参数时,我怎样才能让 .. 表示逻辑父级,而不是物理父级?

最佳答案

因为符号链接(symbolic link)目录中的目录 .. 是您的主目录。

../something 表示“转到.. 目录”,而不是“去掉最后一个路径组件”。

你可以尝试 pwd -P 来查看你在什么地方,在你变成符号链接(symbolic link)之后。

关于linux - 为什么我不能从符号链接(symbolic link)中处理 ".."中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14935898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com