diff --git a/src/lib/shell/binary/mod.rs b/src/lib/shell/binary/mod.rs index 67dec0f93c1b16db456b4a6ceba3ee88c8d80391..7faba21a811d48ca5d98eb7946411dc408552b08 100644 --- a/src/lib/shell/binary/mod.rs +++ b/src/lib/shell/binary/mod.rs @@ -91,13 +91,9 @@ impl Binary for Shell { self.evaluate_init_file(); loop { - let mut lines = itertools::repeat_call(|| { - let line = self.readln(); - self.flags |= UNTERMINATED; - line - }) - .filter_map(|cmd| cmd) - .flat_map(|s| s.into_bytes().into_iter().chain(Some(b'\n'))); + let mut lines = itertools::repeat_call(|| self.readln()) + .filter_map(|cmd| cmd) + .flat_map(|s| s.into_bytes().into_iter().chain(Some(b'\n'))); match Terminator::new(&mut lines).terminate().ok() { Some(command) => { self.flags &= !UNTERMINATED; diff --git a/src/lib/shell/binary/readln.rs b/src/lib/shell/binary/readln.rs index 48cebc6a7d1f9e7044ca8d02327d42f100684a33..e1739627baae77fadea97ea3704d71f12974f1d3 100644 --- a/src/lib/shell/binary/readln.rs +++ b/src/lib/shell/binary/readln.rs @@ -1,4 +1,4 @@ -use super::super::{completer::*, Binary, DirectoryStack, Shell, Variables}; +use super::super::{completer::*, flags, Binary, DirectoryStack, Shell, Variables}; use crate::{sys, types}; use liner::{BasicCompleter, CursorPosition, Event, EventKind}; use std::{env, io::ErrorKind, mem, path::PathBuf}; @@ -110,7 +110,10 @@ pub(crate) fn readln(shell: &mut Shell) -> Option<String> { ); match line { - Ok(line) => Some(line), + Ok(line) => { + shell.flags |= flags::UNTERMINATED; + Some(line) + } // Handles Ctrl + C Err(ref err) if err.kind() == ErrorKind::Interrupted => None, // Handles Ctrl + D