aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJonas Maier <jonas@x77.dev>2026-03-06 20:57:54 +0100
committerJonas Maier <jonas@x77.dev>2026-03-06 20:57:54 +0100
commit74341fb63625f9a3ee73833f347a9fc12ef31710 (patch)
tree66fe9a21b855532907618cb2a586915ec750b3df /src
parent5e77d3c8283f8087c595466897b06700c9296639 (diff)
downloadpish-74341fb63625f9a3ee73833f347a9fc12ef31710.tar.gz
make shell tell you which variable is unbound
Diffstat (limited to 'src')
-rw-r--r--src/run/mod.rs8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/run/mod.rs b/src/run/mod.rs
index ba37061..1880e8d 100644
--- a/src/run/mod.rs
+++ b/src/run/mod.rs
@@ -8,7 +8,7 @@ use crate::*;
mod builtin;
enum ExecError {
- UnknownVariable,
+ UnknownVariable(BString),
ExecError(i32),
}
@@ -206,7 +206,7 @@ impl<'a> parse::Expander for Executor<'a> {
fn expand_var(&mut self, var: BString) -> Result<BString, Self::Error> {
match std::env::var_os(OsStr::from_bytes(&var)) {
Some(val) => Ok(val.as_bytes().to_vec()),
- None => Err(ExecError::UnknownVariable),
+ None => Err(ExecError::UnknownVariable(var)),
}
}
@@ -246,7 +246,9 @@ pub fn run(se: &mut Session, cmd: Vec<u8>) {
let status_string = match result {
Ok(_) => String::new(),
- Err(ExecError::UnknownVariable) => String::from("unbound variable"),
+ Err(ExecError::UnknownVariable(var)) => {
+ format!("unbound variable: {}", String::from_utf8_lossy(&var))
+ }
Err(ExecError::ExecError(i)) => i.to_string(),
};