From 8765caacfda95ad572e6a291216b52689fc85d96 Mon Sep 17 00:00:00 2001 From: Julio Biason Date: Thu, 22 Dec 2022 15:16:25 -0300 Subject: [PATCH] Finding files in PATH --- find_exe.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 find_exe.rs diff --git a/find_exe.rs b/find_exe.rs new file mode 100644 index 0000000..cdb6a36 --- /dev/null +++ b/find_exe.rs @@ -0,0 +1,34 @@ +use std::env; +use std::path::Path; +use std::path::PathBuf; + +fn main() { + let args = env::args(); + if args.len() != 2 { + println!("Missing executable name"); + return; + } + + let command = PathBuf::from(&args.last().unwrap()); + println!("Searching for {:?}...", command); + + if command.exists() { + println!("Command is here!"); + return; + } + + println!("Exe is in {:?}", find_in_path(&command)); +} + +fn find_in_path(command: &Path) -> Option { + env::split_paths(&env::var_os("PATH")?) + .filter_map(|dir| { + let full_path = dir.join(&command); + if full_path.exists() { + Some(full_path) + } else { + None + } + }) + .next() +}