如果我有一个像这样的符号链接文件夹:
/home/user/foo/foo2 -> /home/user/bar/bar2
我 cd 到:/home/user/foo/foo2
。
如果我执行 a pwd
,它会返回:/home/user/foo/foo2
。伟大的!
但如果我那么ls ../
它会返回 的内容/home/user/bar
。
有没有某种方法可以让程序知道它位于符号链接文件夹中,因此如果它进入目录,它就会遵循反向链接?
答案1
一般情况下,不会。你不在 foo2 中。那是一种幻觉。你的外壳保留着幻象,这就是它能看到它的原因。但任何子进程都不知道它
我会检查 $PWD 环境变量。看看你的 shell 是否将其设置为幻象,并且子进程可以看到它。但这仅适用于您控制的代码。你知道你检查了$PWD。其他应用程序将(实际上)调用 cwd()。
答案2
您可以检查当前输出是否pwd
是符号链接。您可以使用file
或等实用程序来完成此操作stat
:
user@host:~/tmp$ mkdir -p sym/bar/bar
user@host:~/tmp$ mkdir -p sym/foo
user@host:~/tmp$ cd sym/foo/
user@host:~/tmp/sym/foo$ ln -s ../bar/bar/ ./foo
user@host:~/tmp/sym/foo$ ls -l
total 0
lrwxrwxrwx 1 user user 11 Feb 24 17:33 foo -> ../bar/bar/
user@host:~/tmp/sym/foo$ cd foo
user@host:~/tmp/sym/foo/foo$ pwd
/home/user/tmp/sym/foo/foo
user@host:~/tmp/sym/foo/foo$ file $(pwd)
/home/user/tmp/sym/foo/foo: symbolic link to ../bar/bar/
user@host:~/tmp/sym/foo/foo$ stat -c %F $(pwd)
symbolic link