From 3f9b1be9b984bd5674f251d7ce4977f2a4607dac Mon Sep 17 00:00:00 2001 From: Jonas Maier Date: Sun, 15 Mar 2026 00:22:59 +0100 Subject: variable command --- src/run/builtin.rs | 28 ++++++++++++++++++++++++++++ src/run/mod.rs | 1 + 2 files changed, 29 insertions(+) diff --git a/src/run/builtin.rs b/src/run/builtin.rs index 99e0103..141357f 100644 --- a/src/run/builtin.rs +++ b/src/run/builtin.rs @@ -392,3 +392,31 @@ impl Builtin for null { Ok(()) } } + +pub struct var; +impl Builtin for var { + fn name(&self) -> &str { + "$" + } + + fn io( + &self, + session: Arc>, + args: &[BString], + _stdin: &mut dyn Read, + stdout: &mut dyn Write, + ) -> Result { + if args.is_empty() { + return Err(Error::Exit(-1)); + } else if args.len() > 1 { + return Err(Error::Exit(-2)); + } + let se = session.lock().unwrap(); + if let Some(val) = se.vars.get(&args[0]) { + stdout.write_all(val.as_slice())?; + Ok(()) + } else { + Err(Error::Exit(1)) + } + } +} diff --git a/src/run/mod.rs b/src/run/mod.rs index 5605639..679dd44 100644 --- a/src/run/mod.rs +++ b/src/run/mod.rs @@ -493,6 +493,7 @@ const BUILTINS: &[&'static dyn Builtin] = &[ &builtin::escape, &builtin::parse, &builtin::null, + &builtin::var, ]; pub fn builtin_map() -> HashMap { -- cgit v1.2.3