docopt.sh
docopt.rs
Our great sponsors
docopt.sh | docopt.rs | |
---|---|---|
5 | 4 | |
182 | 752 | |
- | - | |
0.0 | 0.0 | |
10 months ago | about 3 years ago | |
Python | Rust | |
MIT License | The Unlicense |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
docopt.sh
-
Docopt.sh – Command-Line Argument Parser for Bash 3.2, 4, and 5
I like that this generates readable output that could pass as hand-written code.
The docopt.sh output looks like it went through a JS minifier. Or is there a way to change that? If so I think it should default to that.
https://github.com/andsens/docopt.sh/blob/master/docs/naval_...
-
Programs are dead, and JavaScript has killed them
If you want to avoid having to write your own args parser everytime or think getopt is a pain, you should check out my little project:
https://github.com/andsens/docopt.sh
No dependencies, the code is directly inlined into your script, and you write the args parser by writing the help-text.
-
Beautiful Scripts
Honestly, I left it as a gist because even though it reduces boilerplate, getopts is still not a great flag parser (e.g. only supports single-letter flags, and no type safety or other validation aside from boolean / string). I use it in my shell environment since I have lots of shell functions and I don't care to pull in a "real" parser into my shell, but if I was writing any sort of more complex standalone script I probably wouldn't use it. Check out docopt if you haven't seen it, I've been meaning to give that a whirl at some point.
docopt.rs
-
Docopt.sh – Command-Line Argument Parser for Bash 3.2, 4, and 5
Consider using clap or possibly structopt instead.
It's a lovely way to internalize the CLI argument cultural norms, decrease confusing and verbose argument parsing, make argument parsing work-free for the developer, and make argument parsing a copy-paste across languages. There's no greater pleasure than iteratively adding options to your program by just adding a line of text
-n, --new-option Do something new
I honestly think making a docopt parser is just very hard, which may limit its future prospects.
[the docopt rust repo.]: https://github.com/docopt/docopt.rs
-
Fedora to disallow CC0-licensed code
Ditto, I guess? :P (But obviously with the position on the Unlicense flipped.)
To address your indictment head-on: you suggesting the 0BSD as a better alternative is really missing my point. The 0BSD is not an alternative for my use case. The Unlicense is one of the very few overt "political" acts that I inject into the software I produce. Its purpose is to make a statement. The 0BSD doesn't do that IMO, so it's not actually an alternative that meets my advocacy goal.
You and Rick Moen seem to have the same apparent blind spot for this. See my conversation with him that started here (which might also clarify some aspects of my own position): https://github.com/docopt/docopt.rs/issues/1#issuecomment-42...
And finally, note that my dual licensing scheme is exactly a response to the "problems pointed out by quite a few people": https://github.com/BurntSushi/byteorder/issues/26
-
Docopt
I like Docopt for quick scripts, used it both in Python and Rust projects. It is quite unflexible though.
The Rust Docopt implementation¹ was deprecated this year, which is probably good because clap v3 (https://github.com/clap-rs/clap) is so awesome. In a project of mine (tealdeer), I noticed that docopt.rs was responsible for the huge majority of CPU instructions when running the binary: https://github.com/dbrgn/tealdeer/issues/106#issuecomment-59... I then switched² to clap and shaved off almost a megabyte from the release binary³. Performance improved as well, time required for rendering a tldr page went down from ~15.9 ms to ~12.4 ms⁴. With the migration, we also managed to reduce a lot of custom validation logic and move this logic into the derive macro attributes.
¹ https://github.com/docopt/docopt.rs
- clap 3.0.0-rc.7
What are some alternatives?
docopt - This project is no longer maintained. Please see https://github.com/jazzband/docopt-ng
clap-rs - A full featured, fast Command Line Argument Parser for Rust
bash-cache - Transparent caching layer for bash functions; particularly useful for functions invoked as part of your prompt.
structopt - Parse command line arguments by defining a struct.
shrc - My bashrc/shrc that supports bash, zsh, busybox ash and even Dash. ( has: OS and shell detection )
easy_flag - Simple command line flag parser for rust.
docopt-ng - Humane command line arguments parser. Now with maintenance, typehints, and complete test coverage.
byteorder - Rust library for reading/writing numbers in big-endian and little-endian.
argc - A Bash CLI framework, also a Bash-based command runner.
typer - Typer, build great CLIs. Easy to code. Based on Python type hints.
cligen - Nim library to infer/generate command-line-interfaces / option / argument parsing; Docs at
tealdeer - A very fast implementation of tldr in Rust.