跳转到主要内容

docopt的shell界面,命令行界面描述语言。

项目描述

警告:docopts即将发布的0.7.0版本将具有完全不同的用户界面。请为脚本中断做好准备。

docopts

docopt的shell界面,CLI描述语言

作者:

Lari Rasku

日期:

2013-02-07

版权:

MIT

版本:

0.6.1+fix

手册部分:

1

SYNOPSIS

docopts [options] -h msg : [argv…]

DESCRIPTION

docopts 解析命令行参数向量 argv,根据 docopt 字符串 msg,并将结果作为Bash源代码片段输出到标准输出。将此片段作为参数传递给 eval(1) 即可满足大多数脚本的CLI需求。

如果 argv 与在 msg 中定义的使用模式之一匹配,docopts 会生成代码以将解析后的参数存储为 Bash 变量。由于大多数命令行参数名称不是有效的 Bash 标识符,因此需要进行一些名称变形。

  • <Angle_Brackets>: Angle_Brackets

  • UPPER-CASE: UPPER_CASE

  • --Long-Option: Long_Option

  • -S: S

如果某个参数名称无法变形为有效的 Bash 标识符,或者两个参数名称映射到相同的变量名称,docopt 将以错误状态退出,并且您真的需要重新考虑您的 CLI。-- 和 - 命令将不会被存储。

或者,您可以使用带有 -A <name> 选项的 docopts,它将解析后的参数存储为名为 <name> 的 Bash 4 关联数组的字段。然而,由于 Bash 不原生支持嵌套数组,它们通过以下访问语法来模拟可重复参数

${args[ARG,#]} # the number of arguments to ARG
${args[ARG,0]} # the first argument to ARG
${args[ARG,1]} # the second argument to ARG, etc.

参数存储如下

  • 非重复、无值的参数:如果找到则为 true,如果没有找到则为 false

  • 可重复、无值的参数:在 argv 中的实例计数

  • 非重复、有值的参数:如果找到则作为字符串的值,如果没有找到则为空字符串

  • 可重复、有值的参数:解析值的 Bash 数组

除非提供 --no-help 选项,否则 docopts 会特别处理 --help--version 选项及其可能的别名,生成代码以将相关消息打印到标准输出,并在解析 argv 时遇到任一选项时成功终止。然而请注意,这也需要在 msg 中列出相关选项,并且在 --version 的情况下,需要使用 --version 选项调用 docopts

如果 argvmsg 中的任何使用模式都不匹配,docopts 将生成代码以退出程序并打印状态 64(在 sysexits(3) 中的 EX_USAGE)的诊断错误消息。

选项

-h <msg>, --help=<msg>

docopt 格式的帮助信息。如果指定了 -,则从标准输入读取帮助信息。如果没有指定参数,则打印 docopts 的帮助信息并退出。

-V <msg>, --version=<msg>

版本信息。如果指定了 -,则从标准输入读取版本信息。如果也读取了帮助信息,则首先读取它。如果没有指定参数,则打印 docopts 的版本信息并退出。

-O, --options-first

不允许选项和位置参数混用:从第一个不以破折号开始的参数开始,所有参数都将被视为位置参数。

-H, --no-help

不特别处理 –help 和 –version。

-A <name>

将参数作为名为 <name> 的 Bash 4.x 关联数组导出。

-s <str>, --separator=<str>

用于在标准输入同时提供帮助信息和版本信息时,将两者分开的字符串。[默认值: —-]

示例

从标准输入读取帮助和版本信息

eval "$(docopts -V - -h - : "$@" <<EOF
Usage: rock [options] <argv>...

      --verbose  Generate verbose messages.
      --help     Show help options.
      --version  Print program version.
----
rock 0.1.0
Copyright (C) 200X Thomas Light
License RIT (Robot Institute of Technology)
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
EOF
)"

if $verbose ; then
    echo "Hello, world!"
fi

从脚本注释中解析帮助和版本信息,并将其作为命令行参数传递

#? rock 0.1.0
#? Copyright (C) 200X Thomas Light
#? License RIT (Robot Institute of Technology)
#? This is free software: you are free to change and redistribute it.
#? There is NO WARRANTY, to the extent permitted by law.

##? Usage: rock [options] <argv>...
##?
##?       --help     Show help options.
##?       --version  Print program version.

help=$(grep "^##?" "$0" | cut -c 5-)
version=$(grep "^#?"  "$0" | cut -c 4-)
eval "$(docopts -h "$help" -V "$version" : "$@")"

for arg in "${argv[@]}"; do
    echo "$arg"
done

使用关联数组

eval "$(docopts -A args -h "$help" : "$@")"

if ${args[subcommand]} ; then
    echo "subcommand was given"
fi

if [ -n "${args[--long-option-with-argument]}" ] ; then
    echo "${args[--long-option-with-argument]}"
else
    echo "--long-option-with-argument was not given"
fi

i=0
while [[ $i -lt ${args[<argument-with-multiple-values>,#]} ]] ; do
    echo "${args[<argument-with-multiple-values>,$i]}"
    i=$[$i+1]
done

版本控制

docopts 的版本号始终与其构建时使用的 docopt Python 引用实现 版本相匹配。由于 docopt 遵循 语义版本控制docopts 应该能够与任何与它共享主版本号的 docopt 发布版一起工作;然而,由于 docoptsdocopt 目前都处于主版本号 0,因此 docopts 只能依赖于与它具有完全相同版本号的 docopt 安装。

项目详情


下载文件

下载您平台上的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。

源代码分布

docopts-0.6.1-fix2.tar.gz (6.0 kB 查看散列值)

上传时间 源代码

由...