Prepending/Appending to PATH using Rust

/// Add to to PATH environment variable. If `append` is false, add to the 
/// front of list.
pub fn add_to_path(path: &str, append: bool) -> anyhow::Result<()> {
    use anyhow::Context;
    use std::env;
    use std::path::PathBuf;

    let paths = env::var_os("PATH").context("empty PATH")?;
    let mut paths = env::split_paths(&paths).collect::<Vec<_>>();
    if append {
        paths.push(PathBuf::from(path));
    } else {
        paths.insert(0, PathBuf::from(path));
    }

    let new_path = env::join_paths(paths)?;
    env::set_var("PATH", new_path);

    Ok(())
}

Leave a Reply