From 1edbd0b6f2b218fe431752fcf99b577156b9eebe Mon Sep 17 00:00:00 2001 From: Demiomad <157294157+DemioMAD@users.noreply.github.com> Date: Thu, 11 Sep 2025 17:32:00 +0200 Subject: [PATCH] feat: add new shell command "eval" --- shell/src/built_in/eval.rs | 17 +++++++++++++++++ shell/src/built_in/mod.rs | 3 +++ 2 files changed, 20 insertions(+) create mode 100644 shell/src/built_in/eval.rs diff --git a/shell/src/built_in/eval.rs b/shell/src/built_in/eval.rs new file mode 100644 index 0000000..203b0cc --- /dev/null +++ b/shell/src/built_in/eval.rs @@ -0,0 +1,17 @@ +use crate::built_in::Action; +use std::process::Command; + +pub fn eval(arguments: Vec<&str>) -> Action { + if arguments.len() < 1 { + panic!("eval expects **one or more** arguments"); + } + + let output = Command::new(arguments[0]).args(&arguments[1..]).spawn(); + match output { + Ok(mut output) => { + output.wait().expect("failed to wait for process exit"); + } + Err(err) => println!("{:?}", err) + } + Action::Nothing +} \ No newline at end of file diff --git a/shell/src/built_in/mod.rs b/shell/src/built_in/mod.rs index 37749a6..47e5c73 100644 --- a/shell/src/built_in/mod.rs +++ b/shell/src/built_in/mod.rs @@ -1,16 +1,19 @@ mod cd; mod exit; +mod eval; #[derive(Debug)] pub enum Action { Exit, ChangeDirectory(String), + Nothing } fn get_function(command: String) -> Option) -> Action> { let registry = [ ("exit", exit::exit as fn(Vec<&str>) -> Action), ("cd", cd::cd as fn(Vec<&str>) -> Action), + ("eval", eval::eval as fn(Vec<&str>) -> Action) ]; let mut function: Option) -> Action> = None;