diff options
| -rw-r--r-- | src/run/builtin.rs | 28 | ||||
| -rw-r--r-- | src/run/mod.rs | 1 |
2 files changed, 29 insertions, 0 deletions
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<Mutex<Session>>, + 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<BString, &'static dyn Builtin> { |
