I had a pretty good time rewriting various coreutils in Rust. I liked it because the difficulty of doing so ranges from something as easy as the true
command, where you simply exit with a success status, to more challenging stuff like writing a basic shell.
Granted, it's not that complicated to write CLIs with simple inputs and outputs, so maybe it's not valuable for others but it certainly helped me understand Rust better than before.