diff --git a/crates/nu-command/src/platform/kill.rs b/crates/nu-command/src/platform/kill.rs index 811ce0408e..14e52d1f55 100644 --- a/crates/nu-command/src/platform/kill.rs +++ b/crates/nu-command/src/platform/kill.rs @@ -132,10 +132,37 @@ impl Command for Kill { .stderr(Stdio::null()); } - let output = cmd.output().expect("failed to execute shell command"); + let output = cmd.output().map_err(|e| { + ShellError::GenericError( + "failed to execute shell command".into(), + e.to_string(), + Some(call.head), + None, + Vec::new(), + ) + })?; + + if !quiet && !output.status.success() { + return Err(ShellError::GenericError( + "process didn't terminate successfully".into(), + String::from_utf8(output.stderr).unwrap_or_default(), + Some(call.head), + None, + Vec::new(), + )); + } + let val = String::from( String::from_utf8(output.stdout) - .expect("failed to convert output to string") + .map_err(|e| { + ShellError::GenericError( + "failed to convert output to string".into(), + e.to_string(), + Some(call.head), + None, + Vec::new(), + ) + })? .trim_end(), ); if val.is_empty() { diff --git a/crates/nu-command/tests/commands/mod.rs b/crates/nu-command/tests/commands/mod.rs index de1dd89d00..4f35e1074c 100644 --- a/crates/nu-command/tests/commands/mod.rs +++ b/crates/nu-command/tests/commands/mod.rs @@ -48,6 +48,7 @@ mod open; mod p; mod parse; mod path; +mod platform; mod prepend; mod print; #[cfg(feature = "database")] diff --git a/crates/nu-command/tests/commands/platform/kill.rs b/crates/nu-command/tests/commands/platform/kill.rs new file mode 100644 index 0000000000..d74ffd372a --- /dev/null +++ b/crates/nu-command/tests/commands/platform/kill.rs @@ -0,0 +1,9 @@ +use nu_test_support::nu; + +#[test] +fn test_kill_invalid_pid() { + let pid = i32::MAX; + let actual = nu!(format!("kill {}", pid)); + + assert!(actual.err.contains("process didn't terminate successfully")); +} diff --git a/crates/nu-command/tests/commands/platform/mod.rs b/crates/nu-command/tests/commands/platform/mod.rs new file mode 100644 index 0000000000..f9d2ffbcc3 --- /dev/null +++ b/crates/nu-command/tests/commands/platform/mod.rs @@ -0,0 +1 @@ +mod kill;