diff --git a/src/uu/nl/src/nl.rs b/src/uu/nl/src/nl.rs index fef9c030a..6e1cb6835 100644 --- a/src/uu/nl/src/nl.rs +++ b/src/uu/nl/src/nl.rs @@ -168,7 +168,6 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { )); } - let mut read_stdin = false; let files: Vec = match matches.get_many::(options::FILE) { Some(v) => v.clone().map(|v| v.to_owned()).collect(), None => vec!["-".to_owned()], @@ -178,21 +177,16 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { for file in &files { if file == "-" { - // If both file names and '-' are specified, we choose to treat first all - // regular files, and then read from stdin last. - read_stdin = true; - continue; + let mut buffer = BufReader::new(stdin()); + nl(&mut buffer, &mut stats, &settings)?; + } else { + let path = Path::new(file); + let reader = File::open(path).map_err_context(|| file.to_string())?; + let mut buffer = BufReader::new(reader); + nl(&mut buffer, &mut stats, &settings)?; } - let path = Path::new(file); - let reader = File::open(path).map_err_context(|| file.to_string())?; - let mut buffer = BufReader::new(reader); - nl(&mut buffer, &mut stats, &settings)?; } - if read_stdin { - let mut buffer = BufReader::new(stdin()); - nl(&mut buffer, &mut stats, &settings)?; - } Ok(()) } diff --git a/tests/by-util/test_nl.rs b/tests/by-util/test_nl.rs index b008c61de..118c4cf04 100644 --- a/tests/by-util/test_nl.rs +++ b/tests/by-util/test_nl.rs @@ -349,6 +349,19 @@ fn test_default_body_numbering_multiple_files() { .stdout_is(" 1\ta\n 2\tb\n 3\tc\n"); } +#[test] +fn test_default_body_numbering_multiple_files_and_stdin() { + let (at, mut ucmd) = at_and_ucmd!(); + + at.write("a.txt", "a"); + at.write("c.txt", "c"); + + ucmd.args(&["a.txt", "-", "c.txt"]) + .pipe_in("b") + .succeeds() + .stdout_is(" 1\ta\n 2\tb\n 3\tc\n"); +} + #[test] fn test_body_numbering_all_lines_without_delimiter() { for arg in ["-ba", "--body-numbering=a"] {