diff --git a/src/uu/dircolors/src/dircolors.rs b/src/uu/dircolors/src/dircolors.rs index 6bc96adbf38..4062b0b7a3a 100644 --- a/src/uu/dircolors/src/dircolors.rs +++ b/src/uu/dircolors/src/dircolors.rs @@ -135,13 +135,15 @@ pub fn uumain(args: impl uucore::Args) -> UResult<()> { let result; if files.is_empty() { result = parse(INTERNAL_DB.lines(), &out_format, ""); + } else if files.len() > 1 { + return Err(UUsageError::new( + 1, + format!("extra operand {}", files[1].quote()), + )); + } else if files[0].eq("-") { + let fin = BufReader::new(std::io::stdin()); + result = parse(fin.lines().filter_map(Result::ok), &out_format, files[0]); } else { - if files.len() > 1 { - return Err(UUsageError::new( - 1, - format!("extra operand {}", files[1].quote()), - )); - } match File::open(files[0]) { Ok(f) => { let fin = BufReader::new(f); diff --git a/tests/by-util/test_dircolors.rs b/tests/by-util/test_dircolors.rs index a4ad0df32bd..f34f5573bb9 100644 --- a/tests/by-util/test_dircolors.rs +++ b/tests/by-util/test_dircolors.rs @@ -131,6 +131,25 @@ fn test_exclusive_option() { .stderr_contains("mutually exclusive"); } +#[test] +fn test_stdin() { + new_ucmd!() + .pipe_in("owt 40;33\n") + .args(&["-b", "-"]) + .succeeds() + .stdout_is("LS_COLORS='tw=40;33:';\nexport LS_COLORS\n") + .no_stderr(); +} + +#[test] +fn test_extra_operand() { + new_ucmd!() + .args(&["-c", "file1", "file2"]) + .fails() + .stderr_contains("dircolors: extra operand 'file2'\n") + .no_stdout(); +} + fn test_helper(file_name: &str, term: &str) { new_ucmd!() .env("TERM", term)