src/shell.rs (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
use crate::{error::ShellError, executor}; use std::io::{self, Write}; pub struct Shell { prompt: String, } impl Shell { pub fn new() -> Self { Self { prompt: "bsh> ".to_string(), } } pub fn run(&mut self) -> Result<(), ShellError> { loop { print!("{}", self.prompt); io::stdout().flush().map_err(|e| ShellError::Io(e))?; let mut input = String::new(); io::stdin() .read_line(&mut input) .map_err(|e| ShellError::Io(e))?; let input = input.trim(); if input.is_empty() { continue; } if input == "exit" { println!("Exiting BSH..."); break; } executor::execute(input)?; } Ok(()) } } |