diff --git a/src/bin/coreutils.rs b/src/bin/coreutils.rs index 6a9141936f3..ae076e5b84c 100644 --- a/src/bin/coreutils.rs +++ b/src/bin/coreutils.rs @@ -79,6 +79,11 @@ fn main() { match util { "--list" => { + // If --help is also present, show usage instead of list + if args.any(|arg| arg == "--help" || arg == "-h") { + usage(&utils, binary_as_util); + process::exit(0); + } let mut utils: Vec<_> = utils.keys().collect(); utils.sort(); for util in utils { @@ -127,6 +132,9 @@ fn main() { } usage(&utils, binary_as_util); process::exit(0); + } else if util.starts_with('-') { + // Argument looks like an option but wasn't recognized + validation::unrecognized_option(binary_as_util, &util_os); } else { validation::not_found(&util_os); } diff --git a/src/common/validation.rs b/src/common/validation.rs index 057e8a9120d..afe828081e3 100644 --- a/src/common/validation.rs +++ b/src/common/validation.rs @@ -29,6 +29,16 @@ pub fn not_found(util: &OsStr) -> ! { process::exit(1); } +/// Prints an "unrecognized option" error and exits +pub fn unrecognized_option(binary_name: &str, option: &OsStr) -> ! { + eprintln!( + "{}: unrecognized option '{}'", + binary_name, + option.to_string_lossy() + ); + process::exit(1); +} + /// Sets up localization for a utility with proper error handling pub fn setup_localization_or_exit(util_name: &str) { let util_name = get_canonical_util_name(util_name);