返回排行榜

matejak/argbash

M4argbash.dev

Bash argument parsing code generator

argument-parsingshell-scriptscode-generator
Star 增长趋势
Star
1.5k
Forks
66
周增长
Issues
27
5001k
2016年3月2019年8月2023年2月2026年7月
README

argbash

Build Status Documentation Status

argbash logo

  • Do you write Bash scripts that should accept arguments?
  • But they don't since arguments support is a daunting task, because ...
  • getopt is discouraged, getopts doesn't support long options, there is no widely-accepted Bash module to do the task and some solutions don't work on all platforms (Linux, OSX, MSW)...

Having Argbash, you can generate interface for your first script in a matter of seconds. See a termtosvg recording of how head.sh, a script with a subset of the head command's interface, is created by editing a template provided by argbash-init.

Example

Definitely do give Argbash a try, and stop being terrorized by those pesky arguments! With Argbash, you will get:

  • Fast, minimalistic declaration of arguments your script expects (see below for supported argument types).
  • Scripts generated from definitions once that can be used on all platforms that have bash.
  • Definitions embedded in few lines of the script itself (so you can use Argbash to regenerate the parsing part of your script easily).
  • Ability to re-use low-level Argbash-aware scripts by wrapping them by higher-level Argbash-aware ones conveniently, without duplicating code.
  • Easy installation (optional). Just grab a release, unzip it, go inside and run cd resources && make install (you may want to run sudo make install PREFIX=/usr for a system-wide installation).
  • Documentation and examples.

Make your existing script powered by Argbash in a couple of minutes. Explore various Argbash flavours:

Flavour Target group
Argbash online Use it if you want to try Argbash without installing it and you have permanent access to the Internet.
Argbash CLI Install the package to have argbash ready locally all the time.
Argbash Docker Pretty much like Argbash CLI, but you don't have to install it, you just download the image.

What it is

Argbash is not a parsing library, but it is rather a code generator that generates a bash library tailor-made for your script. It lets you to describe arguments your script should take and then, you can generate the bash parsing code. It stays in your script by default, but you can have it generated to a separate file and let Argbash to include it in your script for you. In any case, you won't need Argbash to run the script.

Argbash is very simple to use and the generated code is relatively nice to read. Moreover, argument definitions stay embedded in the script, so when you need to update the parsing logic, you just re-run the argbash script on the already generated script.

So by writing few comments to your script and running the Argbash's bin/argbash over it, you will get a bash script with argument parsing. See the simple example source template and simple example script for the result. If you are not into long reading, let bin/argbash-init generate the template for you.

Following argument types are supported:

  • Positional arguments (defaults supported, possibility of fixed, variable or infinite number of arguments),
  • optional arguments that take one value,
  • boolean optional arguments,
  • repeated (i.e. non-overwriting) optional arguments,
  • incrementing (such as --verbose) optional arguments and
  • action optional arguments (such as --version, --help).

Following outputs are available:

  • Bash scripts, tailor-made bash parsing libraries.
  • POSIX scripts that use getopts, also tailor-made.
  • Bash completion.
  • docopt-compliant usage message.
  • Manpage output using rst2man.

The utility has been inspired by Python's argparse and the shflags project.

Read the docs (latest stable version) for more info

Requirements

  • bash that can work with arrays (most likely bash >= 3.0) (the only requirement for users - i.e. people that only execute scripts and don't make them)
  • autom4te utility that can work with sets (part of autoconf >= 2.63 suite)
  • basic utilities s.a. sed, grep, cat, test.
相关仓库
clap-rs/clap

A full featured, fast Command Line Argument Parser for Rust

Rustcrates.ioApache License 2.0argument-parsingsubcommands
docs.rs/clap
16.6k1.2k
remkop/picocli

Picocli is a modern framework for building powerful, user-friendly, GraalVM-enabled command line apps with ease. It supports colors, autocompletion, subcommands, and more. In 1 source file so apps can include as source & avoid adding a dependency. Written in Java, usable from Groovy, Kotlin, Scala, etc.

JavaMavenApache License 2.0javacommandline
picocli.info
5.4k472
mattallty/Caporal.js

A full-featured framework for building command line applications (cli) with node.js

TypeScriptnpmMIT Licenseclicli-app
3.5k94
ajalt/clikt

Multiplatform command line interface parsing for Kotlin

KotlinApache License 2.0kotlinkotlin-library
ajalt.github.io/clikt/
3k133
alexflint/go-arg

Struct-based argument parsing in Go

GoGo ModulesBSD 2-Clause "Simplified" Licenseargument-parsinggolang
pkg.go.dev/github.com/alexflint/go-arg
2.3k114
Taywee/args

A header-only C++ argument parser library. Supposed to be flexible and powerful, and attempts to be compatible with the functionality of the Python standard argparse library (though not necessarily the API).

C++MIT Licenseargsargument-parsing
taywee.github.io/args/
1.6k182
Hejsil/zig-clap

Command line argument parsing library

ZigMIT Licensezig-packageargument-parser
1.6k99
muellan/clipp

easy to use, powerful & expressive command line argument parsing for modern C++ / single header / usage & doc generation

C++MIT Licensecppcpp11
1.3k154
brentyi/tyro

CLI interfaces & config objects, from types

PythonPyPIMIT Licenseargparseargument-parsing
brentyi.github.io/tyro
1.1k46