diff --git a/syscare/src/main.rs b/syscare/src/main.rs index 7fde0ca68d58f6ce16c8838511363952d3ccb586..c6361999f5531d8e6d0a742479dd8bdaed013b9d 100644 --- a/syscare/src/main.rs +++ b/syscare/src/main.rs @@ -17,7 +17,7 @@ use std::{env, ffi::OsString, process}; use anyhow::{Context, Result}; use args::SubCommand; use flexi_logger::{LogSpecification, Logger, WriteMode}; -use log::{debug, LevelFilter}; +use log::{debug, error, LevelFilter}; use syscare_common::{concat_os, ffi::OsStrExt, os}; @@ -44,7 +44,20 @@ fn exec_external_cmd(mut args: Vec) -> ! { let exit_status = process::Command::new(&program).args(&args).status(); let exit_code = match exit_status { Ok(status) => status.code().unwrap_or(1), - Err(e) => e.raw_os_error().unwrap_or(1), + Err(e) => { + match e.kind() { + std::io::ErrorKind::NotFound => error!( + "Error: External command '{}' is not installed", + program.to_string_lossy() + ), + _ => error!( + "Error: Failed to execute '{}': {}", + program.to_string_lossy(), + e.to_string().to_lowercase() + ), + } + e.raw_os_error().unwrap_or(1) + } }; process::exit(exit_code);