>我有一个这样的符号链接:
$ mkdir -p /tmp/foo/bar
$ ln -s /tmp/foo/bar /tmp/baz
如果我现在将工作目录更改为使用std::env::set_current_dir
/tmp/baz
,我最终会得到绝对路径/tmp/foo/bar
:
use std::env::{current_dir, set_current_dir};
fn main() {
set_current_dir("/tmp/baz");
println!("{:?}", current_dir().unwrap()); // prints "/tmp/foo/bar"
}
是否可以更改工作目录,以便current_dir
返回逻辑路径/tmp/baz
而不解析符号链接?
std::env::set_current_dir
调用依赖于操作系统的实现。
在 Linux 的情况下,这似乎是你感兴趣的一个,这调用了chdir
其行为,由 POSIX 定义,涉及解决符号链接。
根据设计,工作目录不能是链接。这是一个目录。
由于set_current_dir
只调用不保留您提供的链接的痕迹chdir
,因此您提供的路径将丢失。如果要存储符号链接文件的路径,则必须将其自己存储在用户代码中。