diff options
Diffstat (limited to 'src/runner')
-rw-r--r-- | src/runner/builtins/command.rs | 5 | ||||
-rw-r--r-- | src/runner/builtins/mod.rs | 4 |
2 files changed, 5 insertions, 4 deletions
diff --git a/src/runner/builtins/command.rs b/src/runner/builtins/command.rs index 7d84c8f..a2ba35d 100644 --- a/src/runner/builtins/command.rs +++ b/src/runner/builtins/command.rs @@ -185,17 +185,18 @@ impl Io { } } - pub async fn read_line_stdin(&self) -> anyhow::Result<String> { + pub async fn read_line_stdin(&self) -> anyhow::Result<(String, bool)> { let mut buf = String::new(); if let Some(fh) = self.stdin() { if let File::In(fh) = &mut *fh.lock_arc().await { fh.read_line(&mut buf).await?; } } + let done = buf.is_empty(); if buf.ends_with('\n') { buf.truncate(buf.len() - 1); } - Ok(buf) + Ok((buf, done)) } pub async fn write_stdout(&self, buf: &[u8]) -> anyhow::Result<()> { diff --git a/src/runner/builtins/mod.rs b/src/runner/builtins/mod.rs index 19d250a..5205856 100644 --- a/src/runner/builtins/mod.rs +++ b/src/runner/builtins/mod.rs @@ -213,8 +213,8 @@ fn read( bail!(cfg, exe, "usage: read var"); }; - let (done, val) = match cfg.io().read_line_stdin().await { - Ok(line) => (line.is_empty(), line), + let (val, done) = match cfg.io().read_line_stdin().await { + Ok((line, done)) => (line, done), Err(e) => { bail!(cfg, exe, e); } |