diff --git a/src/uu/csplit/src/csplit.rs b/src/uu/csplit/src/csplit.rs index 501f97582..b0005e75e 100644 --- a/src/uu/csplit/src/csplit.rs +++ b/src/uu/csplit/src/csplit.rs @@ -202,7 +202,12 @@ impl Drop for SplitWriter<'_> { fn drop(&mut self) { if self.options.elide_empty_files && self.size == 0 { let file_name = self.options.split_name.get(self.counter); - remove_file(file_name).expect("Failed to elide split"); + // In the case of `echo a | csplit -z - %a%1`, the file + // `xx00` does not exist because the positive offset + // advanced past the end of the input. Since there is no + // file to remove in that case, `remove_file` would return + // an error, so we just ignore it. + let _ = remove_file(file_name); } } } diff --git a/tests/by-util/test_csplit.rs b/tests/by-util/test_csplit.rs index e062b6d55..7c0036ded 100644 --- a/tests/by-util/test_csplit.rs +++ b/tests/by-util/test_csplit.rs @@ -335,6 +335,16 @@ fn test_skip_to_match_offset() { } } +#[test] +fn test_skip_to_match_offset_suppress_empty() { + let (at, mut ucmd) = at_and_ucmd!(); + ucmd.args(&["-z", "-", "%a%1"]) + .pipe_in("a\n") + .succeeds() + .no_output(); + assert!(!at.file_exists("xx00")); +} + #[test] fn test_skip_to_match_negative_offset() { let (at, mut ucmd) = at_and_ucmd!();