diff options
Diffstat (limited to 'src/run/builtin.rs')
| -rw-r--r-- | src/run/builtin.rs | 28 |
1 files changed, 28 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)) + } + } +} |
