如何在不遵循符号链接的情况下更改 Rust 中的工作目录?



>我有一个这样的符号链接:

$ 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,因此您提供的路径将丢失。如果要存储符号链接文件的路径,则必须将其自己存储在用户代码中。

最新更新