rsh-crate 0.2.2

A simple shell written in rust, build for educational purpose. My goal is to learn more about rust and how interpreters work under the hood.
use crate::{Values, commands};
use std::collections::VecDeque;
use std::env;

pub fn get_history() -> VecDeque<String>{
    let mut values = Values::new();
    values.dir = env::home_dir().unwrap();
    values.args = Some(vec![String::from(".config"),String::from(".config/rsh")]);

    let mkdir = commands::search("mkdir");
    mkdir.unwrap().run(&mut values);
    values.args = Some(vec![String::from(".config/rsh/history")]);

    let touch = commands::search("touch");
    touch.unwrap().run(&mut values);

    let mut history: VecDeque<String> = VecDeque::from([String::new()]);
    let cat = commands::search("cat");
    let temp = cat.unwrap().run(&mut values);

    if temp.is_empty(){
        return VecDeque::new();
    }
    let temp = temp[0].clone().unwrap();
    let mut i = 0;
    for c in temp.chars(){
        if c == '\t'{
            history.push_back(String::new());
            i += 1;
            continue;
        }
        history[i].push(c);
    }
    values.args = None;
    history
}

pub fn store_history(history: VecDeque<String>){
    let mut values = Values::new();
    values.dir = env::home_dir().unwrap();
    values.args = Some(vec![String::from(".config/rsh/history")]);

    let write = commands::search("write");
    values.pipe = Some(Vec::from(history).join("\t"));

    write.unwrap().run(&mut values);
    values.args = None;
}

pub fn run_startup(values: &mut Values){
    values.dir = env::home_dir().unwrap();
    values.args = Some(vec![String::from(".config/rsh/rsh.rsh")]);
    let cat = commands::search("cat");
    let result = cat.unwrap().run(values)[0].clone();
    values.args = None;
    if result.is_err(){
        return;
    }
    let mut s = result.unwrap();

    s = s.lines()
        .filter(|l| !l.trim().starts_with("#"))
        .map(|l| format!("{}\n", l))
        .collect();

    let (result, _) = crate::main_loop(values, s.trim());

    for r in result {
        match r {
            Ok(x) => {
                print!("{}", x);
            }
            Err(_) => {}
        }
    }
    values.args = None;
}