Function std::env::join_paths

1.0.0 · source ·
pub fn join_paths<I, T>(paths: I) -> Result<OsString, JoinPathsError>where
    I: IntoIterator<Item = T>,
    T: AsRef<OsStr>,
Expand description

PATH 环境变量适当地加入 Path 的集合。

Errors

如果输入 Path 之一包含用于构造 PATH 变量的无效字符 (Windows 上的双引号或 Unix 上的冒号),则返回 Err (包含错误消息)。

Examples

在类似 Unix 的平台上的连接路径:

use std::env;
use std::ffi::OsString;
use std::path::Path;

fn main() -> Result<(), env::JoinPathsError> {
    let paths = [Path::new("/bin"), Path::new("/usr/bin")];
    let path_os_string = env::join_paths(paths.iter())?;
    assert_eq!(path_os_string, OsString::from("/bin:/usr/bin"));
    Ok(())
}
Run

在类似 Unix 的平台上加入包含冒号的路径会导致错误:

use std::env;
use std::path::Path;

let paths = [Path::new("/bin"), Path::new("/usr/bi:n")];
assert!(env::join_paths(paths.iter()).is_err());
Run

env::join_paths()env::split_paths() 结合使用,可以将项追加到 PATH 环境变量中:

use std::env;
use std::path::PathBuf;

fn main() -> Result<(), env::JoinPathsError> {
    if let Some(path) = env::var_os("PATH") {
        let mut paths = env::split_paths(&path).collect::<Vec<_>>();
        paths.push(PathBuf::from("/home/xyz/bin"));
        let new_path = env::join_paths(paths)?;
        env::set_var("PATH", &new_path);
    }

    Ok(())
}
Run