#arguments-parser #command-runner #bash #parser #runner #arg #positional-arguments

bin+lib argc

Bash 命令行框架,也是基于 Bash 的命令执行器

45 个版本 (23 个稳定版本)

1.20.1 2024 年 8 月 17 日
1.19.0 2024 年 6 月 18 日
1.16.0 2024 年 3 月 26 日
1.14.0 2023 年 11 月 27 日
0.7.0 2022 年 3 月 14 日

#46 in 开发工具

Download history 12/week @ 2024-04-26 3/week @ 2024-05-03 12/week @ 2024-05-17 140/week @ 2024-05-24 70/week @ 2024-05-31 35/week @ 2024-06-07 175/week @ 2024-06-14 47/week @ 2024-06-21 38/week @ 2024-06-28 169/week @ 2024-07-05 29/week @ 2024-07-12 37/week @ 2024-07-19 708/week @ 2024-07-26 250/week @ 2024-08-02 45/week @ 2024-08-09

每月 1,044 次下载
用于 runme

MIT/Apache

320KB
8K SLoC

Argc

CI Crates

Argc 是一个强大的 Bash 框架,简化了构建功能齐全的 CLI。它允许您通过注释定义 CLI,专注于核心逻辑,而无需处理参数解析、使用说明、错误消息和其他样板代码。

demo

功能

  • 轻松的参数解析
    • 处理标志、选项、位置参数和子命令。
    • 验证用户输入以实现健壮的错误处理。
    • 生成信息丰富的使用说明。
    • 将参数映射到相应的变量。
  • 独立 Bash 脚本创建
    • 构建一个包含所有功能的 bash 脚本,而不依赖于 Argc 本身。
  • 跨 shell 自动完成
    • 为各种 shell(bash、zsh、fish、powershell 等)生成自动完成脚本。
  • 手册页生成
    • 自动为您脚本创建全面的 man 页面文档。
  • 环境变量集成
    • 定义、验证并将环境变量绑定到选项和位置参数。
  • 任务自动化
    • 一个基于 Bash 的命令执行器,通过 Argcfile.sh 自动化任务。
  • 跨平台兼容性
    • 在 macOS、Linux、Windows 和 BSD 系统上无缝运行基于 Argc 的脚本。

安装

软件包管理器

  • Rust 开发者: cargo install argc
  • Homebrew/Linuxbrew 用户: brew install argc
  • Pacman 用户: yay -S argc

预构建二进制文件

或者,从 GitHub Releases 下载预构建的二进制文件,适用于 macOS、Linux 和 Windows,解压缩它,并将 argc 二进制文件添加到您的 $PATH 中。

您可以在 Linux、MacOS 或 Windows 上使用以下命令下载最新版本。

curl -fsSL https://raw.githubusercontent.com/sigoden/argc/main/install.sh | sh -s -- --to /usr/local/bin

GitHub Actions

install-binary 可用于在 GitHub Actions 工作流程中安装 argc。

  - uses: sigoden/install-binary@v1
    with:
      repo: sigoden/argc

入门指南

使用 Argc 构建 CLI 程序非常简单。只需遵循以下两个步骤

1. 设计您的 CLI 接口

使用注释标签(稍后解释)描述选项、标志、位置参数和子命令。

2. 激活参数处理

在您的脚本中添加此行:eval "$(argc --argc-eval "$0" "$@")"。这将在您的程序中集成 Argc 的解析魔法。

让我们用一个例子来说明

# @flag -F --foo  Flag param
# @option --bar   Option param
# @option --baz*  Option param (multi-occurs)
# @arg val*       Positional param

eval "$(argc --argc-eval "$0" "$@")"

echo foo: $argc_foo
echo bar: $argc_bar
echo baz: ${argc_baz[@]}
echo val: ${argc_val[@]}

使用一些示例参数运行脚本

./example.sh -F --bar=xyz --baz a --baz b v1 v2

Argc 解析这些参数并创建以 argc_ 为前缀的变量

foo: 1
bar: xyz
baz: a b
val: v1 v2

只需运行 ./example.sh --help,即可查看您的 CLI 自动生成的帮助信息

USAGE: example [OPTIONS] [VAL]...

ARGS:
  [VAL]...  Positional param

OPTIONS:
  -F, --foo           Flag param
      --bar <BAR>     Option param
      --baz [BAZ]...  Option param (multi-occurs)
  -h, --help          Print help
  -V, --version       Print version

通过这些简单的步骤,您就可以开始利用 Argc 并创建健壮的 CLI 程序了!

注释标签

注释标签是带有 @ 和特定标签的标准的 Bash 注释。它们为 Argc 提供了配置脚本功能的说明。

标签 描述
@describe 为命令设置描述。
@cmd 定义子命令。
@alias 为子命令设置别名。
@arg 定义位置参数。
@option 定义选项参数。
@flag 定义标志参数。
@env 定义环境变量。
@meta 添加元数据。

有关所有注释标签的语法和用法,请参阅 规范

Argc-build

生成一个独立的 bash 脚本,其中包含当存在 argc 命令时通常可用的所有功能。

生成的脚本移除了 argc 依赖,增强了兼容性,并使部署到更广泛的环境中成为可能。

argc --argc-build <SCRIPT> [OUTPATH]
argc --argc-build ./example.sh build/

./build/example.sh -h     # The script's functionality does not require the `argc` dependency

Argcscript

Argc 还是为那些喜欢 Bash 脚本的高效性和灵活性而构建的命令运行器。

类似于 Makefile 为 make 工具定义命令的方式,Argcscript 使用 Argcfile.sh 来存储您的命令,称为“配方”。

为什么为您的项目选择 Argc?

  • 利用 Bash 技能:无需学习新语言,非常适合 Bash 爱好者。
  • GNU 工具集集成:利用熟悉的工具,如 awk、sed、grep、find 等。
  • 环境变量管理:轻松加载、文档化和验证环境变量。
  • 强大的 Shell 自动完成:享受自动完成建议,提高生产力。
  • 跨平台兼容性:在 Linux、macOS、Windows 和 BSD 系统上无缝运行。

有关详细信息,请参阅 命令运行器

argcscript

完成

Argc 自动为所有基于 argc 的脚本提供 shell 完成功能。

argc --argc-completions <SHELL> [CMDS]...

以下,我们以cmd1和cmd2为例,说明如何为各种shell添加完成脚本。

# bash (~/.bashrc)
source <(argc --argc-completions bash cmd1 cmd2)

# elvish (~/.config/elvish/rc.elv)
eval (argc --argc-completions elvish cmd1 cmd2 | slurp)

# fish (~/.config/fish/config.fish)
argc --argc-completions fish cmd1 cmd2 | source

# nushell (~/.config/nushell/config.nu)
argc --argc-completions nushell cmd1 cmd2 # update config.nu manually according to output

# powershell ($PROFILE)
Set-PSReadlineKeyHandler -Key Tab -Function MenuComplete
argc --argc-completions powershell cmd1 cmd2 | Out-String | Invoke-Expression

# xonsh (~/.config/xonsh/rc.xsh)
exec($(argc --argc-completions xonsh cmd1 cmd2))

# zsh (~/.zshrc)
source <(argc --argc-completions zsh cmd1 cmd2)

# tcsh (~/.tcshrc)
eval `argc --argc-completions tcsh cmd1 cmd2`

所有完成脚本的核心都是调用argc --argc-compgen以获取完成候选。

$ argc --argc-compgen bash ./example.sh example --
--foo (Flag param)
--bar (Option param)
--baz (Option param (multi-occurs))
--help (Print help)
--version (Print version)

因此,argc也是一个完成引擎,请参见argc-completions中的1000多个示例。

手册页

为基于argc的CLI生成手册页。

argc --argc-mangen <SCRIPT> [OUTDIR]
argc --argc-mangen ./example.sh man/

man man/example.1

Windows

argc的唯一依赖项是Bash。由于大多数在Windows上工作的开发者都安装了Git,其中包含Git Bash,因此您可以在Windows环境中安全地使用argc和GNU工具(如grepsedawk等)。

使.sh文件可执行

要直接像.cmd.exe文件一样执行.sh脚本文件,请在PowerShell中执行以下代码。

# Add .sh to PATHEXT
[Environment]::SetEnvironmentVariable("PATHEXT", [Environment]::GetEnvironmentVariable("PATHEXT", "Machine") + ";.SH", "Machine")

# Associate the .sh file extension with Git Bash
New-Item -Path Registry::HKEY_CLASSES_ROOT\.sh
New-ItemProperty -LiteralPath Registry::HKEY_CLASSES_ROOT\.sh -Name "(Default)" -Value "sh_auto_file" -PropertyType String -Force
New-ItemProperty -LiteralPath 'HKLM:\SOFTWARE\Classes\sh_auto_file\shell\open\command' `
  -Name '(default)' -Value '"C:\Program Files\Git\bin\bash.exe" "%1" %*' -PropertyType String -Force

windows-shell

许可证

版权所有(c)2023-2024 argc开发者。

argc根据您的选择,在MIT许可证或Apache许可证2.0的条款下提供。

有关许可证详细信息,请参阅LICENSE-APACHE和LICENSE-MIT文件。

依赖项

~3–16MB
~166K SLoC