summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2022-01-09 23:36:05 -0500
committerJesse Luehrs <doy@tozt.net>2022-01-09 23:36:05 -0500
commitf7ae4de810779c367f7d4cfa83c234ef138b44e0 (patch)
treeed0f4e5cb06995a2b55e3befbb0ebf30277a17ff /src
parentd67d7cda39f5c3a84ee030778d69cdf08634a33c (diff)
downloadnbsh-f7ae4de810779c367f7d4cfa83c234ef138b44e0.tar.gz
nbsh-f7ae4de810779c367f7d4cfa83c234ef138b44e0.zip
also clear the variable when read hits eof
Diffstat (limited to 'src')
-rw-r--r--src/runner/builtins/mod.rs15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/runner/builtins/mod.rs b/src/runner/builtins/mod.rs
index 07be59f..117cefd 100644
--- a/src/runner/builtins/mod.rs
+++ b/src/runner/builtins/mod.rs
@@ -235,20 +235,19 @@ fn read(
bail!(cfg, exe, "usage: read var");
};
- let val = match cfg.io().read_line_stdin().await {
- Ok(line) => {
- if line.is_empty() {
- return std::process::ExitStatus::from_raw(1 << 8);
- }
- line
- }
+ let (done, val) = match cfg.io().read_line_stdin().await {
+ Ok(line) => (line.is_empty(), line),
Err(e) => {
bail!(cfg, exe, e);
}
};
std::env::set_var(var, val);
- async_std::process::ExitStatus::from_raw(0)
+ async_std::process::ExitStatus::from_raw(if done {
+ 1 << 8
+ } else {
+ 0
+ })
}
Ok(command::Child::new_fut(async move {