diff --git a/src/uu/shuf/src/shuf.rs b/src/uu/shuf/src/shuf.rs index a5456e184..9ee04826b 100644 --- a/src/uu/shuf/src/shuf.rs +++ b/src/uu/shuf/src/shuf.rs @@ -435,11 +435,10 @@ fn shuf_exec(input: &mut impl Shufable, opts: Options) -> UResult<()> { None => WrappedRng::RngDefault(rand::thread_rng()), }; - if input.is_empty() { - return Ok(()); - } - if opts.repeat { + if input.is_empty() { + return Err(USimpleError::new(1, "no lines to repeat")); + } for _ in 0..opts.head_count { let r = input.choose(&mut rng); diff --git a/tests/by-util/test_shuf.rs b/tests/by-util/test_shuf.rs index 76d9b3220..7b0af7c94 100644 --- a/tests/by-util/test_shuf.rs +++ b/tests/by-util/test_shuf.rs @@ -624,3 +624,32 @@ fn test_shuf_multiple_input_line_count() { .count(); assert_eq!(result_count, 5, "Output should have 5 items"); } + +#[test] +#[ignore = "known issue"] +fn test_shuf_repeat_empty_range() { + new_ucmd!() + .arg("-ri4-3") + .fails() + .no_stdout() + .stderr_only("shuf: no lines to repeat\n"); +} + +#[test] +fn test_shuf_repeat_empty_echo() { + new_ucmd!() + .arg("-re") + .fails() + .no_stdout() + .stderr_only("shuf: no lines to repeat\n"); +} + +#[test] +fn test_shuf_repeat_empty_input() { + new_ucmd!() + .arg("-r") + .pipe_in("") + .fails() + .no_stdout() + .stderr_only("shuf: no lines to repeat\n"); +}