1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-09-16 11:46:17 +00:00

README: rewrite description

- Remove "attempt", I think we're good enough to call it more than an attempt
- Make it more specifically about the GNU coreutils.
This commit is contained in:
Terts Diepraam 2023-03-14 17:19:12 +01:00
parent c83f6eeadd
commit 04c7d2f60d

View file

@ -20,10 +20,9 @@
<!-- markdownlint-disable commands-show-output no-duplicate-heading --> <!-- markdownlint-disable commands-show-output no-duplicate-heading -->
<!-- spell-checker:ignore markdownlint ; (options) DESTDIR RUNTEST UTILNAME manpages --> <!-- spell-checker:ignore markdownlint ; (options) DESTDIR RUNTEST UTILNAME manpages -->
uutils is an attempt at writing universal (as in cross-platform) CLI uutils coreutils is a cross-platform reimplementation of the GNU coreutils in
utilities in [Rust](http://www.rust-lang.org). [Rust](http://www.rust-lang.org). While all programs have been implemented, some
While all programs have been implemented, some options might be missing options might be missing or different behavior might be experienced.
or different behavior might be experienced.
To install it: To install it:
@ -33,13 +32,15 @@ cargo install coreutils
``` ```
<!-- markdownlint-disable-next-line MD026 --> <!-- markdownlint-disable-next-line MD026 -->
## Why?
uutils aims to work on as many platforms as possible, to be able to use the ## Goals
same utils on Linux, Mac, Windows and other platforms. This ensures, for
example, that scripts can be easily transferred between platforms. Rust was uutils aims to be a drop-in replacement for the GNU utils. Differences with GNU
chosen not only because it is fast and safe, but is also excellent for are treated as bugs.
writing cross-platform code.
uutils aims to work on as many platforms as possible, to be able to use the same
utils on Linux, Mac, Windows and other platforms. This ensures, for example,
that scripts can be easily transferred between platforms.
## Documentation ## Documentation
@ -48,10 +49,11 @@ uutils has both user and developer documentation available:
- [User Manual](https://uutils.github.io/user/) - [User Manual](https://uutils.github.io/user/)
- [Developer Documentation](https://uutils.github.io/dev/coreutils/) - [Developer Documentation](https://uutils.github.io/dev/coreutils/)
Both can also be generated locally, the instructions for that can be found in the Both can also be generated locally, the instructions for that can be found in
[coreutils docs](https://github.com/uutils/uutils.github.io) repository. the [coreutils docs](https://github.com/uutils/uutils.github.io) repository.
<!-- ANCHOR: build (this mark is needed for mdbook) --> <!-- ANCHOR: build (this mark is needed for mdbook) -->
## Requirements ## Requirements
- Rust (`cargo`, `rustc`) - Rust (`cargo`, `rustc`)
@ -59,13 +61,13 @@ Both can also be generated locally, the instructions for that can be found in th
### Rust Version ### Rust Version
uutils follows Rust's release channels and is tested against stable, beta and nightly. uutils follows Rust's release channels and is tested against stable, beta and
The current Minimum Supported Rust Version (MSRV) is `1.64.0`. nightly. The current Minimum Supported Rust Version (MSRV) is `1.64.0`.
## Building ## Building
There are currently two methods to build the uutils binaries: either Cargo There are currently two methods to build the uutils binaries: either Cargo or
or GNU Make. GNU Make.
> Building the full package, including all documentation, requires both Cargo > Building the full package, including all documentation, requires both Cargo
> and Gnu Make on a Unix platform. > and Gnu Make on a Unix platform.
@ -79,8 +81,8 @@ cd coreutils
### Cargo ### Cargo
Building uutils using Cargo is easy because the process is the same as for Building uutils using Cargo is easy because the process is the same as for every
every other Rust program: other Rust program:
```shell ```shell
cargo build --release cargo build --release
@ -89,9 +91,9 @@ cargo build --release
This command builds the most portable common core set of uutils into a multicall This command builds the most portable common core set of uutils into a multicall
(BusyBox-type) binary, named 'coreutils', on most Rust-supported platforms. (BusyBox-type) binary, named 'coreutils', on most Rust-supported platforms.
Additional platform-specific uutils are often available. Building these Additional platform-specific uutils are often available. Building these expanded
expanded sets of uutils for a platform (on that platform) is as simple as sets of uutils for a platform (on that platform) is as simple as specifying it
specifying it as a feature: as a feature:
```shell ```shell
cargo build --release --features macos cargo build --release --features macos
@ -102,18 +104,18 @@ cargo build --release --features unix
``` ```
If you don't want to build every utility available on your platform into the If you don't want to build every utility available on your platform into the
final binary, you can also specify which ones you want to build manually. final binary, you can also specify which ones you want to build manually. For
For example: example:
```shell ```shell
cargo build --features "base32 cat echo rm" --no-default-features cargo build --features "base32 cat echo rm" --no-default-features
``` ```
If you don't want to build the multicall binary and would prefer to build If you don't want to build the multicall binary and would prefer to build the
the utilities as individual binaries, that is also possible. Each utility utilities as individual binaries, that is also possible. Each utility is
is contained in its own package within the main repository, named contained in its own package within the main repository, named "uu_UTILNAME". To
"uu_UTILNAME". To build individual utilities, use cargo to build just the build individual utilities, use cargo to build just the specific packages (using
specific packages (using the `--package` [aka `-p`] option). For example: the `--package` [aka `-p`] option). For example:
```shell ```shell
cargo build -p uu_base32 -p uu_cat -p uu_echo -p uu_rm cargo build -p uu_base32 -p uu_cat -p uu_echo -p uu_rm
@ -157,10 +159,12 @@ Likewise, installing can simply be done using:
cargo install --path . --locked cargo install --path . --locked
``` ```
This command will install uutils into Cargo's *bin* folder (*e.g.* `$HOME/.cargo/bin`). This command will install uutils into Cargo's _bin_ folder (_e.g._
`$HOME/.cargo/bin`).
This does not install files necessary for shell completion or manpages. This does not install files necessary for shell completion or manpages. For
For manpages or shell completion to work, use `GNU Make` or see `Manually install shell completions`/`Manually install manpages`. manpages or shell completion to work, use `GNU Make` or see
`Manually install shell completions`/`Manually install manpages`.
### Install with GNU Make ### Install with GNU Make
@ -213,8 +217,8 @@ be generated; See `Manually install shell completions`.
### Manually install shell completions ### Manually install shell completions
The `coreutils` binary can generate completions for the `bash`, `elvish`, `fish`, `powershell` The `coreutils` binary can generate completions for the `bash`, `elvish`,
and `zsh` shells. It prints the result to stdout. `fish`, `powershell` and `zsh` shells. It prints the result to stdout.
The syntax is: The syntax is:
@ -222,8 +226,8 @@ The syntax is:
cargo run completion <utility> <shell> cargo run completion <utility> <shell>
``` ```
So, to install completions for `ls` on `bash` to `/usr/local/share/bash-completion/completions/ls`, So, to install completions for `ls` on `bash` to
run: `/usr/local/share/bash-completion/completions/ls`, run:
```shell ```shell
cargo run completion ls bash > /usr/local/share/bash-completion/completions/ls cargo run completion ls bash > /usr/local/share/bash-completion/completions/ls
@ -232,12 +236,12 @@ cargo run completion ls bash > /usr/local/share/bash-completion/completions/ls
### Manually install manpages ### Manually install manpages
To generate manpages, the syntax is: To generate manpages, the syntax is:
```bash ```bash
cargo run manpage <utility> cargo run manpage <utility>
``` ```
So, to install the manpage for `ls` to `/usr/local/share/man/man1/ls.1` So, to install the manpage for `ls` to `/usr/local/share/man/man1/ls.1` run:
run:
```bash ```bash
cargo run manpage ls > /usr/local/share/man/man1/ls.1 cargo run manpage ls > /usr/local/share/man/man1/ls.1
@ -310,7 +314,7 @@ See <https://github.com/uutils/coreutils/issues/3336> for the main meta bugs
(many are missing). (many are missing).
| Done | WIP | | Done | WIP |
|-----------|-----------| | ------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------- |
| arch | cp | | arch | cp |
| base32 | date | | base32 | date |
| base64 | dd | | base64 | dd |