Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/skx/subcommands
Easy subcommand handling for a golang based command-line application
https://github.com/skx/subcommands
cli golang library subcommands utility
Last synced: 18 days ago
JSON representation
Easy subcommand handling for a golang based command-line application
- Host: GitHub
- URL: https://github.com/skx/subcommands
- Owner: skx
- License: gpl-2.0
- Created: 2019-10-30T15:49:27.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2022-01-01T10:19:17.000Z (almost 3 years ago)
- Last Synced: 2024-10-03T10:12:37.233Z (about 1 month ago)
- Topics: cli, golang, library, subcommands, utility
- Language: Go
- Size: 35.2 KB
- Stars: 3
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
[![GoDoc](https://godoc.org/github.com/skx/subcommands?status.svg)](http://godoc.org/github.com/skx/subcommands)
[![Go Report Card](https://goreportcard.com/badge/github.com/skx/subcommands)](https://goreportcard.com/report/github.com/skx/subcommands)
[![license](https://img.shields.io/github/license/skx/subcommands.svg)](https://github.com/skx/subcommands/blob/master/LICENSE)
[![Release](https://img.shields.io/github/release/skx/subcommands.svg)](https://github.com/skx/subcommands/releases/latest)# subcommands
This is a simple package which allows you to write a CLI with distinct subcommands.
## Overview
Using this library you can enable your command-line application to have a number of subcommands, allowing things like this to be executed:
$ application one
$ application two [args]
$ application helpIn addition to allowing the user to specify a sub-command via the first argument it will also allow a default to be used if your binary has the same name as a sub-command.
For example if you had a binary named `gobox` you could create a symlink called `ls`:
$ ln -s gobox ls
$ ./lsHere running `ls` is the same as running `gobox ls`, and argument parsing would work the same too:
$ gobox ls --foo
$ ./ls --foo## Bash Completion
All applications using this library will find it easy to generate a bash-completion script, via the following addition to their init-file:
$ source <(application bash-completion)
The generated completion-script will allow TAB-completion of the sub-commands, as well as their options.
## Rationale
There are several frameworks for building a simple CLI application, such as Corba. But those are relatively heavyweight.
This is designed to implement the minimum required support:
* Allow an application to register sub-commands:
* `foo help`
* Show help
* `foo version`
* Show the version
* `foo server`
* Launch a HTTP-server
* etc.
* Allow flags to be defined on a per-subcommand basis.
* Allow the sub-commands to process any remaining arguments.
* Allow trivial bash-completion scripts to be generated.## Example
There is a simple example defined in [_example/main.go](_example/main.go).