SkillAgentSearch skills...

ShellOptions

Library for dealing with command line options for bash and zsh

Install / Use

/learn @davvil/ShellOptions
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

options.bash and options.zsh by David Vilar

This is a small library for handling command line options in bash and zsh. It is inspired by the optparse python library. An example usage is

addOption -n --number required help="Specify some number" dest=myNumber
addOption -a --aux flagTrue help="Another option, but without dest"
addOption -o help="Option with default" default="a b" dest=otherO
parseOptions "$@"

This example defines the options -n/--number, -a/--aux and -o. -n sets the variable $myNumber and is required by the script to run. -a sets the $aux variable to true when given (it does not require arguments). -o sets the variable $otherO, but if not specified on the command line, it defaults to "a b". Additionaly the option -h/--help is automatically generated and produces this output:

usage: example.bash [options]

Options:

   -n,--number                Specify some number
   -a,--aux                   Another option, but without dest
   -o                         Option with default
   -h,--help                  Show this help message

To use the library in your own script, copy it somewhere and include it in your script (.bash or .zsh depending on which shell you use):

. options.bash

New options are added with the addOption command. It scans its arguments for those beginning with a dash to get the short and long option syntax (one of them can be omitted). Additionally you can give these additional commands:

  • dest=VAR Sets the destination of the variable. If not given, it defaults to the long option name (see option --aux in the example above)

  • action=COMMAND Calls command if the option is specified in the command line (usually this is used for calling functions in the script, but it is not limited to it)

  • default=VALUE Sets the default value for the option, if not given in the command line

  • required Specifies that the option is required [I know, this is a contradiction of terms ;-)]. The script will abort with an error message if the option is not given in the command line

  • help=MESSAGE Specifies the help message to be written in the output with the -h options

  • flagTrue/flagFalse Specifies that the option is a boolean. flagTrue sets the default value to false and turns it to true if the option is given in the command line. flagFalse works the other way round. Note that you can use such variable directly in bash constructs like if clauses, while loops, etc:

    if $var; then
            echo "var is set
    fi
    
  • configFile This option makes the script read an external file. Normally this is used as a config file, where the values of variables are set, e.g.

    input=file.in
    output=file.out
    iterations=3
      
    

    Note that the file is included directly in bash, no fancy parsing is done. This means among other things that no whitespace is allowed around = signs and that command can be executed from within the "config file". Use with caution.

  • dontShow Do not show the option in the output of -h. Useful if some options are thought to be used only when calling the script from other script.

Once you have defined the options for your script, use the command parseOptions "$@" to parse the command line and set the appropriate variables. Additional command line arguments are stored in the $optArgv[] array, with $optArgc storing the number of actual arguments.

The library follows the usual convention of supporting -- to separate options from command line arguments, e.g. in the call ./example.sh -n 3 -a -- -b aaa the arguments are "-b" and "aaa".

This library has been extensively used in the Jane statistical machine translation toolkit (http://www.hltpr.rwth-aachen.de/jane)

View on GitHub
GitHub Stars14
CategoryDevelopment
Updated7mo ago
Forks5

Languages

Shell

Security Score

67/100

Audited on Aug 8, 2025

No findings