Crates.io | urgeopts |
lib.rs | urgeopts |
version | 0.1.2 |
source | src |
created_at | 2020-03-15 05:54:31.915824 |
updated_at | 2020-03-16 12:18:46.436146 |
description | rich getopts replacement for shell script |
homepage | https://github.com/fumieval/urgeopts |
repository | |
max_upload_size | |
id | 218780 |
size | 17,586 |
urgeopts
is a replacement for getopt
based on clap.
urgeopts
takes option descriptors as a YAML document from stdin, and parse arguments passed to it, and prints the result which can be eval
'd. See example.sh for concrete usage.
Configurations look like
name: example
bin_name: $0
version: "1.0"
about: sample text
author: Fumiaki Kinoshita <fumiexcel@gmail.com>
# Flags take no arguments.
# Number of occurences will be reported (e.g. verbose=1)
flags:
verbose:
help: verbose output
short: v
long: verbose
# Options arguments are collected as newline-separated list of values.
opts:
# usage syntax is also supported
# cf. https://docs.rs/clap/2.33.0/clap/struct.Arg.html#syntax
host: -h --host <HOST> 'host name'
mode:
long: mode
help: option with a certain set of possible values
possible_values: [ herbivore, carnivore, omnivore ]
# Positional arguments
args:
- name: cmd
help: command
required: true
- name: arg
help: command arguments
multiple: true
subcommands:
ls: #The name will be assigned to $subcommand
about: Display a list of entities
args:
- name: name
multiple: true
Usually, you want to embed configurations in a heredoc, pass all arguments to urgeopts
and eval
its output:
eval "$(urgeopts "$@" <<EOT
...
EOT
)"
I intentionally didn't use clap::App::from_yaml
because the YAML representation tend to be redundant, and hard to diagnose panics.