diff options
| author | Jonas Maier <jonas@x77.dev> | 2026-03-15 00:22:59 +0100 |
|---|---|---|
| committer | Jonas Maier <jonas@x77.dev> | 2026-03-15 00:22:59 +0100 |
| commit | 3f9b1be9b984bd5674f251d7ce4977f2a4607dac (patch) | |
| tree | 33dda6c75ec2485b2e07b29eb1b89e012834e296 /src | |
| parent | 3f7d80b746df37ffcb76076d84c15b7027042a89 (diff) | |
| download | pish-3f9b1be9b984bd5674f251d7ce4977f2a4607dac.tar.gz | |
variable command
Diffstat (limited to 'src')
| -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> { |
