diff options
Diffstat (limited to 'src/builtins.rs')
-rw-r--r-- | src/builtins.rs | 52 |
1 files changed, 49 insertions, 3 deletions
diff --git a/src/builtins.rs b/src/builtins.rs index b81c4ba..ad41e59 100644 --- a/src/builtins.rs +++ b/src/builtins.rs @@ -1,8 +1,7 @@ use std::path::Path; +use std::process::Command; -pub fn cd(args: std::str::SplitWhitespace) -> std::path::PathBuf { - let new_dir = args.peekable().peek().map_or("/", |x| *x); - +pub fn cd(new_dir: &str) -> std::path::PathBuf { let root = match std::fs::canonicalize(Path::new(new_dir)) { Ok(p) => p, Err(_) => Path::new("/").to_path_buf(), @@ -14,3 +13,50 @@ pub fn cd(args: std::str::SplitWhitespace) -> std::path::PathBuf { root.to_path_buf() } + +pub fn run(command: &str, args: &[&str]) { + let mut child = Command::new(command).args(args).spawn().unwrap(); + child.wait().unwrap(); +} +/* + match command { + + command => { + let stdin = match previous_command { + None => Stdio::inherit(), + Some(cmd) => Stdio::from(cmd.stdout.unwrap()), + }; + let stdout = match commands.peek().is_some() { + true => Stdio::piped(), + false => Stdio::inherit(), + }; + + let child = Command::new(command) + .args(args) + .stdin(stdin) + .stdout(stdout) + .spawn(); + match child { + Ok(c) => previous_command = Some(c), + Err(e) => { + previous_command = None; + eprintln!("{}", e); + } + } + } + } +} + +if let Some(mut final_command) = previous_command { + match final_command.wait() { + Ok(ret) => match ret.code() { + Some(code) => { + if cfg!(debug_assertions) { + println!("exit code [{}]", code); + } + } + None => println!("Process termed by signal"), + }, + Err(e) => eprintln!("error waiting on final command: {}", e), + } +}*/ |