From d05460a16c1cd37625bdd2554a71ad1c7a6fa0df Mon Sep 17 00:00:00 2001 From: "Timothy G." <22472919+GTimothy@users.noreply.github.com> Date: Thu, 19 Jun 2025 21:59:23 +0200 Subject: [PATCH] unexpand: add -f short alias for --first-only (#8229) --- docs/src/extensions.md | 5 +++++ src/uu/unexpand/src/unexpand.rs | 1 + tests/by-util/test_unexpand.rs | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/docs/src/extensions.md b/docs/src/extensions.md index 81457c29d..6f394d490 100644 --- a/docs/src/extensions.md +++ b/docs/src/extensions.md @@ -193,3 +193,8 @@ Just like on macOS, `base32/base64/basenc` provides `-D` to decode data. ## `shred` The number of random passes is deterministic in both GNU and uutils. However, uutils `shred` computes the number of random passes in a simplified way, specifically `max(3, x / 10)`, which is very close but not identical to the number of random passes that GNU would do. This also satisfies an expectation that reasonable users might have, namely that the number of random passes increases monotonically with the number of passes overall; GNU `shred` violates this assumption. + +## `unexpand` + +GNU `unexpand` provides `--first-only` to convert only leading sequences of blanks. We support a +second way: `-f` like busybox. diff --git a/src/uu/unexpand/src/unexpand.rs b/src/uu/unexpand/src/unexpand.rs index 8956da4e5..c5c4327a5 100644 --- a/src/uu/unexpand/src/unexpand.rs +++ b/src/uu/unexpand/src/unexpand.rs @@ -175,6 +175,7 @@ pub fn uu_app() -> Command { ) .arg( Arg::new(options::FIRST_ONLY) + .short('f') .long(options::FIRST_ONLY) .help(get_message("unexpand-help-first-only")) .action(ArgAction::SetTrue), diff --git a/tests/by-util/test_unexpand.rs b/tests/by-util/test_unexpand.rs index 8b447ecdb..ed983ca76 100644 --- a/tests/by-util/test_unexpand.rs +++ b/tests/by-util/test_unexpand.rs @@ -95,6 +95,24 @@ fn unexpand_first_only_1() { .stdout_is("\t\t A B"); } +#[test] +fn unexpand_first_only_2() { + new_ucmd!() + .args(&["-t3", "-f"]) + .pipe_in(" A B") + .succeeds() + .stdout_is("\t\t A B"); +} + +#[test] +fn unexpand_first_only_3() { + new_ucmd!() + .args(&["-f", "-t8"]) + .pipe_in(" A B") + .succeeds() + .stdout_is("\tA B"); +} + #[test] fn unexpand_trailing_space_0() { // evil