use pseudoterminal::CommandExt;
use std::io::{Read, Write, stdout};
use std::process::Command;
fn main() -> Result<(), Box<dyn std::error::Error>> {
cfg_if::cfg_if! {
if #[cfg(unix)] {
let mut cmd = Command::new("bash");
} else if #[cfg(windows)] {
let mut cmd = Command::new("cmd.exe");
} else {
panic!("Unsupported platform")
}
}
let mut terminal = cmd.spawn_terminal()?;
let mut input_buffer = String::new();
let mut output_buffer = [0u8; 1024];
loop {
std::io::stdin().read_line(&mut input_buffer)?;
terminal
.terminal_in
.as_mut()
.unwrap()
.write_all(input_buffer.as_bytes())?;
let bytes_read = terminal
.terminal_out
.as_mut()
.unwrap()
.read(&mut output_buffer)?;
stdout().write_all(&output_buffer[..bytes_read])?;
stdout().flush()?;
input_buffer.clear();
}
}