//! Print the environment or start a command with environment overrides. use sausage_spawn::Command; fn run() -> Result { let mut args = std::env::args().skip(1).peekable(); let mut clear = false; if args.peek().is_some_and(|a| a == "-i" || a == "--ignore-environment") { clear = true; args.next(); } let mut values = if clear { std::collections::BTreeMap::new() } else { std::env::vars().collect() }; while args.peek().is_some_and(|a| a.contains('=')) { let arg = args.next().unwrap(); let (key, value) = arg.split_once('=').unwrap(); values.insert(key.to_owned(), value.to_owned()); } if let Some(program) = args.next() { let mut command = Command::new(program); command.env_clear(); for (key, value) in values { command.env(key, value); } command.args(args).status() } else { for (key, value) in values { println!("{key}={value}"); } Ok(0) } } fn main() { std::process::exit(match run() { Ok(code) => code, Err(e) => { eprintln!("env: {e}"); if e.kind() == std::io::ErrorKind::NotFound { 127 } else { 126 } } }); }