diff --git a/src/uu/id/src/id.rs b/src/uu/id/src/id.rs index b8fb51d79db..e803708bdce 100644 --- a/src/uu/id/src/id.rs +++ b/src/uu/id/src/id.rs @@ -324,6 +324,7 @@ pub fn uu_app() -> Command { .about(ABOUT) .override_usage(format_usage(USAGE)) .infer_long_args(true) + .args_override_self(true) .arg( Arg::new(options::OPT_AUDIT) .short('A') @@ -396,6 +397,7 @@ pub fn uu_app() -> Command { Arg::new(options::OPT_PASSWORD) .short('P') .help("Display the id as a password file entry.") + .conflicts_with(options::OPT_HUMAN_READABLE) .action(ArgAction::SetTrue), ) .arg( diff --git a/tests/by-util/test_id.rs b/tests/by-util/test_id.rs index 5c2a67199c6..070ed011e26 100644 --- a/tests/by-util/test_id.rs +++ b/tests/by-util/test_id.rs @@ -327,6 +327,11 @@ fn test_id_default_format() { .args(&args) .succeeds() .stdout_only(unwrap_or_return!(expected_result(&ts, &args)).stdout_str()); + let args = [opt2, opt2]; + ts.ucmd() + .args(&args) + .succeeds() + .stdout_only(unwrap_or_return!(expected_result(&ts, &args)).stdout_str()); } } @@ -456,3 +461,16 @@ fn test_id_no_specified_user_posixly() { } } } + +#[test] +#[cfg(all(unix, not(target_os = "android")))] +fn test_id_pretty_print_password_record() { + // `-p` is BSD only and not supported on GNU's `id`. + // `-P` is our own extension, and not supported by either GNU nor BSD. + // These must conflict, because they both set the output format. + new_ucmd!() + .arg("-p") + .arg("-P") + .fails() + .stderr_contains("the argument '-p' cannot be used with '-P'"); +}