1 个不稳定版本
0.2.0 | 2020年6月14日 |
---|
#72 in #argument
13KB
132 行
docpars
为您的 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 上的 Termux 或 Windows 上的 WSL。
您想要极致的性能
基准测试 显示 docpars 比其 Python 相当物快 5.7 倍。
对于大多数用例来说,这可能不太明显,但如果您的脚本在 for 循环中调用,这可能会产生差异。
安装
使用 Homebrew 或 Linuxbrew
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.rs 由 BurntSushi 完成,在那里实现了实际的 Docopt 解析。
依赖项
~3.5–5.5MB
~94K SLoC