如何告诉程序它位于符号链接文件夹中?

如何告诉程序它位于符号链接文件夹中?

如果我有一个像这样的符号链接文件夹:

/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

相关内容