/* Rust Arch Linux Updater Copyright (C) 2024 Luke Harding This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* shell_commands.rs This file contains utility functions to interact with the shell. */ use std::ffi::OsStr; use std::io; use std::process::{Child, Command, Output, Stdio}; pub fn execute_and_display, I>(cmd: S, args: I) -> io::Result where I: IntoIterator, I::Item: AsRef, { let mut child = Command::new(cmd) .args(args) .stderr(Stdio::piped()) .spawn()?; child.wait()?; Ok(child) } pub fn execute_in_sh(cmd: &'static str) -> io::Result { execute_and_display("sh", ["-c", cmd]) } pub fn execute_quiet, I>(cmd: S, args: I) -> io::Result where I: IntoIterator, I::Item: AsRef, { Command::new(cmd).args(args).output() }