#shell #script #clap #replace #standalone #wrapper #getopt

app urgeopts

适用于shell脚本的丰富的getopts替代品

3个版本

0.1.2 2020年3月16日
0.1.1 2020年3月15日
0.1.0 2020年3月15日

#18 in #getopt

MIT 许可证

13KB
251 代码行

urgeopts:独立的clap包装器

urgeopts at crates.io urgeopts at docs.rs

urgeopts 是基于 clapgetopt 替代品。

urgeopts 从stdin读取选项描述符作为YAML文档,解析传递给它的参数,并打印出可由 eval 评估的结果。请参阅example.sh以了解具体用法。

配置示例

name: example
bin_name: $0
version: "1.0"
about: sample text
author: Fumiaki Kinoshita <[email protected]>
# 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

通常,您希望将配置嵌入到heredoc中,将所有参数传递给 urgeopts 并评估其输出

eval "$(urgeopts "$@" <<EOT
...
EOT
)"

注意

我故意没有使用 clap::App::from_yaml,因为YAML表示通常冗余,并且难以诊断panic。

依赖关系

~1MB
~11K SLoC