#shell #bash #parser #arguments-parser #cli #argument

bin+lib docpars

声明式命令行选项的超快速解析器

1 个不稳定版本

0.2.0 2020年6月14日

#72 in #argument

Apache-2.0

13KB
132

docpars Actions 状态 GitHub 发布

为您的 shell 脚本提供声明式命令行选项的超快速解析器。

它实现了 Docopt 语法,并使用 Rust 编写。

目录

用法

如果您为以下脚本运行 coffee make --dark...

#!/usr/bin/env bash

##? Coffee tool
##?
##? Usage:
##?     coffee make [--dark]
##?     coffee drink

# This function could be included in a helper bash file 
# and imported by all your scripts
args::parse() {
   eval "$(/path/to/docpars -h "$(grep "^##?" "$0" | cut -c 5-)" : "$@")"
}

args::parse "$@"

if $drink; then
   echo "Drinking coffee..."
elif $make; then
   $dark && echo "Making dark coffee..." || echo "Making coffee..."
fi

...则应打印出 Making dark coffee...

动机

默认的 docopt 实现(用于 shell 脚本)在底层使用 Python。您可能想在以下情况下使用 docpars

您想要便携性

这可能是 CI/CD 实例、最小化 Docker 容器或您可能想要运行一些脚本但未配备完整开发工具的环境,例如 Android 上的 TermuxWindows 上的 WSL

您想要极致的性能

基准测试 显示 docpars 比其 Python 相当物快 5.7 倍。

对于大多数用例来说,这可能不太明显,但如果您的脚本在 for 循环中调用,这可能会产生差异。

安装

使用 HomebrewLinuxbrew

brew install denisidoro/tools/docpars

使用 cargo

cargo install docpars

下载预编译的二进制文件

您可以从这里下载构建的二进制文件:这里

它们适用于 OSX、Android 和 Linux,并提供 ARM 和 x86_64 变体。

从源码构建

git clone https://github.com/denisidoro/docpars ~/.docpars
cd ~/.docpars
cargo install --path .

致谢

大部分工作是在 docopt.rsBurntSushi 完成,在那里实现了实际的 Docopt 解析。

依赖项

~3.5–5.5MB
~94K SLoC